设计模式-建造模式(一碗牛肉面的制造过程)

来源:互联网 发布:东南大学考研分数算法 编辑:程序博客网 时间:2024/04/30 20:10

设计模式-建造模式

参考资料:
《java与模式》
《设计模式-可复用面向对象软件的基础》
《C#技术揭密》

摘要:介绍Gof设计模式创建模式中的建造模式,结合一个生活中的一个,来说明建造模式的使用场合和使用方法
          工厂模式中,创建对象是直接创建的,而对一个复杂的对象来说,用建造模式更适合,它一步一步的创建一个复杂对象。
         基本的模式是这样的
interface  Builder
{
    //建造“零件”
    void BuildPart1();
    void BuildPart2();
    
    //返回产品
    Product GetProduct();
}

这样从此类继承的建造者,可以根据上面定义的两种建造零件方法,构造任意复杂的建造者。

/*
 * created by sharpdevelop.
 * user: administrator
 * date: 2004-12-02
 * time: 19:57
 *
 * to change this template use tools | options | coding | edit standard headers.
 */
using System;

namespace builder
{
 class mainclass
 {
      public static void Main(string[] args)
      {
           SnackShop snackShop=new SnackShop();
           NoodleBuilder bcnwc=new BeefCutNoodleWithCarawayBuilder();
           Noodle noodle=snackShop.CreateBeefCutNoodleWithCaraway(bcnwc);
   
           Console.ReadLine();
      }
 }
 
 //定义快餐店,导演者的角色
 class SnackShop
 {
      public SnackShop()
      {

      }

      //客户端创建加香菜牛肉刀削面的方法
      public Noodle CreateBeefCutNoodleWithCaraway(NoodleBuilder noodleBuilder)
      {
           noodleBuilder.BuildNoodle();
           noodleBuilder.BuildMeat();
           noodleBuilder.BuildPureNoodle();
           noodleBuilder.BuildSoup();
           noodleBuilder.BuildVegetable();
           Console.WriteLine("一碗香喷喷的牛肉刀削面加香菜做好啦!/n");
   
           return noodleBuilder.GetNoodle();
      }
 }
 
 //定义面条构造器接口
 interface NoodleBuilder
 {
      void BuildNoodle();
      void BuildPureNoodle();
      void BuildMeat();
      void BuildVegetable();
      void BuildSoup();
  
      Noodle GetNoodle();
 }
 
 //肉类
 public class Meat
 {
      public Meat()
      {
  
      }
      void Make()
      {
  
      }
 }
 //纯面条类
 public class PureNoodle
 {
      void Make()
      {
  
      }
 }
 //蔬菜类
 public class Vegetable
 {
      void Make()
      {
  
      }
 }
 //汤类
 public class Soup
 {
      public Soup()
      {
   
      }

      void Make()
      {
  
      }
 }
 
 //定义拉面,它从纯面条类继承
 public class PullPureNoodle:PureNoodle
 {
      public PullPureNoodle()
      {
           Console.WriteLine("拉面做好了/n");
      }
      public void Make()
      {
   
      }
 }
 
 //定义刀削面,它从纯面条类继承
 public class CutPureNoodle:PureNoodle
 {
      public CutPureNoodle()
      {
   
      }
      public void Make()
      {
   
      }
 }
 
 //定义青菜
 public class Greengrocery:Vegetable
 {
      public Greengrocery()
      {
           Console.WriteLine("青菜买好了/n");
      }
      public void Make()
      {
       
      }
 }
 
 //定义香菜
 public class Caraway :Vegetable
 {
      public Caraway()
      {
   
      }
      public void Make()
      {
       
      }
 }
 
 //定义羊肉
 public class Mutton:Meat
 {
      public Mutton()
      {    
           Console.WriteLine("羊肉做好了/n");
      }
      public void Make()
      {
   
      }
 }
 
 //定义牛肉
 public class Beef:Meat
 {
      public Beef()
      {
   
      }
      public void Make()
      {
   
      }
 }
 
 //定义面条类
 public class Noodle
 {
      public PureNoodle pureNoodle;
      public Vegetable vegetable;
      public Soup soup;
      public Meat meat;
      public Noodle()
      {
           pureNoodle=new PureNoodle();
           vegetable=new Vegetable();
           soup=new Soup();
           meat=new Meat();
   
      }
  
 }
 
 //定义牛肉刀削面的建造者逻辑
 class BeefCutNoodleWithCarawayBuilder :NoodleBuilder
 {
      public BeefCutNoodleWithCarawayBuilder()
      {
   
      }
      private Noodle noodle;
      public void BuildPureNoodle()
      {
           noodle.pureNoodle=new CutPureNoodle();
           Console.WriteLine("2.刀削面做好了/n");
      }
      public void BuildVegetable()
      {
           noodle.vegetable=new Caraway();
           Console.WriteLine("4.香菜洗好了/n");
      }
      public void BuildMeat()
      {
           noodle.meat=new Beef();
           Console.WriteLine("1.牛肉做好了 /n");
      }
      public void BuildSoup()
      {
           noodle.soup=new Soup();
           Console.WriteLine("3.面汤做好了/n");
      }
      public void BuildNoodle()
      {
           Console.WriteLine("开始做牛肉刀削面啦 /n");
           noodle=new Noodle();
      }
      public Noodle GetNoodle()
      {
           return noodle;
      }
 }
 
}

/*运行结果:
 *
开始做牛肉面条啦

1.牛肉做好了

2.刀削面做好了

3.面汤做好了

4.香菜洗好了

一碗香喷喷的牛肉刀削面做好啦!
*/

原创粉丝点击