为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
JavaScript

开发的设计模式,是博大精深的,只有一步一个脚印和循序渐进的学习与应用,才能有进步。
近段时间,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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消