• 做一顿家常便饭,建造者设计模式(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


  • 相关阅读:
    时间使用
    关于Dubbo说明及备注
    jQuery 的function简单备注
    Eclipse插件
    存储过程和视图的区别
    easyUi jqgrid search
    Python3内置函数——reversed() = 翻转我的世界
    你追求的目标正确吗
    Python3正则表示式(3)
    英语口语学习笔记(13)
  • 原文地址:https://www.cnblogs.com/insus/p/2940139.html
Copyright © 2020-2023  润新知