做一顿家常便饭,建造者设计模式(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
共同学习,写下你的评论
评论加载中...
作者其他优质文章