开同样间断便饭,建造者设计模式(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

 

相关文章