代码改变世界

创建者模式

2010-08-26 22:24  Clingingboy  阅读(2124)  评论(0编辑  收藏  举报

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 下面会发现模式实现方式与策略模式,桥接模式等都是相似的,唯有意图不同而已.此为创建者模式

image_2

创建者模式在平时生活中很常见,如肯德基的套餐,可乐可以跟很多东西组合成一个套餐.而你向服务员要的就是一个套餐,服务员就把不同东西组合在一起成了一个套餐,然后给你.

1.定义产品类

class Product {
   List <string> parts = new List <string> ();
   public void Add(string part) {
     parts.Add(part);
   }
 
   public void Display() {
     Console.WriteLine("\nProduct Parts -------");
     foreach (string part in parts)
       Console.Write(part);
     Console.WriteLine();
   }
 }

2.定义创建接口与对象

interface IBuilder {
   void BuildPartA();
   void BuildPartB();
   Product GetResult();
 }
 
 class Builder1 : IBuilder {
   private Product product = new Product();
   public  void BuildPartA() {
     product.Add("PartA ");
   }
 
   public void BuildPartB() {
     product.Add("PartB ");
   }
 
   public Product GetResult() {
     return product;
   }
 }
 
 class Builder2 : IBuilder {
   private Product product = new Product();
   public void BuildPartA() {
     product.Add("PartX ");
   }
 
   public void BuildPartB() {
     product.Add("PartY ");
   }
 
   public Product GetResult() {
     return product;
   }
 }

3.开始组合创建

class Director {
   // Builder uses a complex series of steps
   public void Construct(IBuilder builder) {
     builder.BuildPartA();
     builder.BuildPartB();
     builder.BuildPartB();
   }
 }

4.客户端调用

public static void Main() { 
   // Create one director and two builders
   Director director = new Director();
 
   IBuilder b1 = new Builder1();
   IBuilder b2 = new Builder2();
 
   // Construct two products
   director.Construct(b1);
   Product p1 = b1.GetResult();
   p1.Display();
 
   director.Construct(b2);
   Product p2 = b2.GetResult();
   p2.Display();
   Console.ReadKey();
 }

此模式也是抽象的结果,与其他一些模式实现方式差不多,唯一不同的是意图