举行相同中断便饭,建造者设计模式(Builder)设计模式–建造者(Builder)模式。

支付之设计模式,是无所不知的,只生同步一个脚印暨循序渐进的学习与运,才能够来发展。
守段日子,Insus.NET把团结了解设计模式,简单写了一晃跟享受温馨之解以及想法。得到不少王牌和网友的来者不拒评论,让Insus.NET学习与发展不掉,真心感谢了。

以一个繁杂的构建和那个表示相分离,使得一样的构建过程可以创造不同之意味

前方几龙来描绘了相同首《烹调,简单工厂(Simple
Factory)》,一开始便创造一个”烹饪类”,来承担创建其他类的实例。接下来创建炒,煎,煮,炖等相近。
今日,Insus.NET也是因烹饪来描写一个建造者设计模式,烹饪是饮食的计。Insus.NET虽然未是炊事员,但好品尝各种美味的佳肴。

                                                                
--《设计模式》GOF

此篇是介绍建造者设计模式,我们以烹饪之不二法门做相同间断家常便饭:

Insus.NET在ASP.NET环境被,列举一个建造者设计模式(Builder)例子,以无比帖近开发环境和需求。

必威 1必威 2HomelyFood

支付站点时,我们用出新闻类,视频类,图片类等等。每个网页还有可能是页头,内容,页脚等。开发这些页头,内容和页脚时,我们见面采用用户控件来写好,加载到网页遭到失去。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for HomelyFood
/// </summary>
namespace Insus.NET
{
    //家常便饭
    public class HomelyFood
    {
        //饭菜        
        List<string> Meals = new List<string>();

        public void Add(string riceOrDish) 
        {
            Meals.Add(riceOrDish);
        }

        public void Serve() //饭菜上桌
        {
            foreach (string s in Meals)
            {
                HttpContext.Current.Response.Write(s);
            }
        }

    }
}

每个品种的网页,你分别新建三独用户控件(ascx),
NewsHeader,NewsContent,NewsFooter,
xxxHeader,xxxContent,xxxFooter等……

举行饭类,是架空的修者类,确定就顿家常便饭的情。如炒青菜,煎鸡蛋,清蒸鱼,还有炖汤等:

NewsHeader.ascx:
必威 3

必威 4必威 5Cooking

NewsContent.ascx:
必威 6

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Cooking
/// </summary>
namespace Insus.NET
{
    public abstract class Cooking
    {
        public abstract void BoilRice();
        public abstract void Fry();
        public abstract void PanFry();
        public abstract void Steam();
        public abstract void Stew();

        public abstract HomelyFood GetHomelyFood();
    }
}

NewsFooter.ascx:
必威 7

便使上面的常备便饭的菜式,每个做饭者做下的菜式名目也许是一样,但是手法不相同,调味不雷同,都见面显为实际的细节之上。但是吃上立顿饭的人头,不理解做的历程。
故而下的接近是一个真正做饭者类。当然要被上烹饪竞赛场地,如在有电视台可以看到烹饪竞赛节目,那些是多人多团队拓展。因此需要创造多只类似。

实属,把网页每块做成用户控件,这样细化和维护。

必威 8必威 9BehaviourCook

如今我们得修建一个网页(产品),这个活是由三个部件组成。
必威 10

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for BehaviourCook
/// </summary>
namespace Insus.NET
{
    public class BehaviourCook : Cooking
    {
        private HomelyFood hf = new HomelyFood();

        public override void BoilRice()
        {
            hf.Add("白米饭。");
        }

        public override void Fry()
        {
            hf.Add("蒜蓉炒通菜。");
        }

        public override void PanFry()
        {
            hf.Add("煎荷包蛋。");
        }

        public override void Steam()
        {
            hf.Add("清蒸鲩鱼。");
        }

        public override void Stew()
        {
            hf.Add("炖汤。");
        }

        public override HomelyFood GetHomelyFood()
        {
            return hf;
        }
    }
}

您的网页会起许多,如达到所列举的,显示文章,新闻,视频,图片等。我们要定义一个虚无的同接口,让现实类闹一个统一标准:
必威 11

建造者设计模式,还有一个指挥者类,一下班,儿子便本着Insus.NET说,肚子饿了,爸爸赶紧做饭吃我吃,要来炖汤,清蒸鲩鱼,煎荷包蛋,蒜蓉炒通菜,当然米饭是必要的。

建造者设计模式,还一个角色,就是组织者:
必威 12

必威 13必威 14Director

今日咱们得建造具体类,真实产品(网页),NewPage, VideoPage,ArticlePage
等等:
必威 15

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Director
/// </summary>
namespace Insus.NET
{
    public class Director
    {
        public void Construct(Cooking c)
        {
            c.BoilRice();
            c.Fry();
            c.PanFry();
            c.Steam();
            c.Stew();
        }
    }
}

而今,我们得以骨子里的网页遭到去显得完整的制品(网页):
当xxx.aspx中,拉一个控件容器,如PlaceHolder,这里只是举列,实际条件面临,也许得拉好几独容器,来以网页定义和动态加载。
必威 16

ok,经过少只钟头烹制,一顿简单而可口的家常便饭上桌了:

xxx.aspx.cs:
必威 17

必威 18必威 19HomelyFoodDemo.aspx.cs

网页运行时,看看效果:
必威 20

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;

public partial class HomelyFoodDemo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Director director = new Director();

        Cooking c = new BehaviourCook();
        director.Construct(c);

        HomelyFood hf = c.GetHomelyFood();

        hf.Serve();
    }
}

 

 建造者设计模式源代码(.net 4.0):

下面内容为2014-12-23
13:32私分上:
遗忘把整体的示范代码分享了:http://download.cnblogs.com/insus/CSharpNET/DesignPattern_Builder.rar

 http://download.cnblogs.com/insus/CSharpNET/Insus_Builder.rar

 

相关文章