构造模式(Builder)

1. 构造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  (同样的构造过程其实就是指很多个不同的构造者有相同的构造方法。)

2. 优点:使得构造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果要改变一个产品的内部表示,只需要再定义一个具体的构造者即可。

3.解决的问题:
主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但是对象内部的构建通常面临着复杂的变化。

4. 构造者模式的角色:

  • 产品(Product)角色:整个构造模式的产物;
  • 抽象构造器(Builder)角色:
  • 具体构造器(ConcreteBuilder)角色:具体的构造器实现,是整个构造模式的核心,其中封装了一个目标的对象实例;
  • 指挥者(Director)角色:调用各种具体的构造器完成对象构建。

实例代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 
  5 namespace BuildPatten
  6 {
  7     class Program
  8     {
  9         static void Main(string[] args)
 10         {
 11             Director d = new Director();
 12             Builder b1 = new ConcreteBuliderA();
 13             Builder b2 = new ConcreteBuliderB();
 14 
 15             d.Construct(b1);
 16             product p= b1.GetResult();
 17             p.Show();
 18 
 19             d.Construct(b2);
 20             product p2= b2.GetResult();
 21             p2.Show();
 22 
 23             Console.ReadLine();
 24         }
 25     }
 26 
 27     public class product
 28     {
 29         private IList<string> parts = new List<string>();
 30 
 31         public void Add(string part)
 32         {
 33             parts.Add(part);
 34         }
 35 
 36         public void Show()
 37         {
 38             Console.WriteLine("开始创建产品:");
 39             foreach (string part in parts)
 40             {
 41                 Console.WriteLine("部件" + part);
 42             }
 43             Console.WriteLine("产品创建完成");
 44         }
 45     }
 46 
 47     public abstract class Builder
 48     {
 49         public abstract void BuildPartA();
 50         public abstract void BuildPartB();
 51         public abstract product GetResult();
 52     }
 53 
 54     public class ConcreteBuliderA : Builder
 55     {
 56         product product = new product();
 57         public override void BuildPartA()
 58         {
 59             product.Add("A1");
 60         }
 61 
 62         public override void BuildPartB()
 63         {
 64             product.Add("B1");
 65         }
 66 
 67         public override product GetResult()
 68         {
 69             return product;
 70         }
 71     }
 72 
 73     public class ConcreteBuliderB : Builder
 74     {
 75         product product = new product();
 76         public override void BuildPartA()
 77         {
 78             product.Add("A2");
 79         }
 80 
 81         public override void BuildPartB()
 82         {
 83             product.Add("B2");
 84         }
 85 
 86         public override product GetResult()
 87         {
 88             return product;
 89         }
 90     }
 91 
 92     public class Director
 93     {
 94         public void Construct(Builder builder)
 95         {
 96             builder.BuildPartA();
 97             builder.BuildPartB();
 98         }
 99     }
100 
101 }

 

 

 

posted @ 2014-04-03 20:19  sky钦  阅读(338)  评论(0)    收藏  举报