做一顿家常便饭,建造者设计模式(Builder)

开发的设计模式,是博大精深的,只有一步一个脚印和循序渐进的学习与应用,才能有进步。
近段时间,Insus.NET把自己理解设计模式,简单写了一下与分享自己的理解与想法。得到很多高手与网友的热心评论,让Insus.NET学习与进步不少,真心感谢了。

前几天有写了一篇《烹饪,简单工厂(Simple Factory)》,一开始就创建一个"烹饪类",来负责创建其他类的实例。接下来创建炒,煎,煮,炖等类。
今天,Insus.NET也是以烹饪来写一个建造者设计模式,烹饪是膳食的艺术。Insus.NET虽然不是厨师,但喜欢品尝各种美味的佳肴。


此篇是介绍建造者设计模式,我们以烹饪的方式做一顿家常便饭:

HomelyFood
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);
            }
        }

    }
}


做饭类,是抽象的建造者类,确定这顿家常便饭的内容。如炒青菜,煎鸡蛋,清蒸鱼,还有炖汤等:

Cooking
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();
    }
}


就如上面的家常便饭的菜式,每个做饭者做出来的菜式名目也许是一样,但是手法不一样,调味不一样,都会显示于实际的细节之上。但是吃上这顿饭的人,不清楚做的过程。
因此下面的类是一个真正做饭者类。当然如果遇上烹饪比赛场合,如在某某电视台可以看到烹饪比赛节目,那些是多人多团队进行。因此需要创建多个类。

BehaviourCook
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;
        }
    }
}


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

Director
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();
        }
    }
}


ok,经过一二个小时烹制,一顿简单而美味的家常饭上桌了:

HomelyFoodDemo.aspx.cs
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):

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


posted @ 2013-03-02 15:53  Insus.NET  阅读(1504)  评论(1编辑  收藏  举报