设计模式之建造者模式

建造者模式:

  • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

示例代码:

  • Product类————产品类,由多个部件组成。
class Product {
    IList<String> parts = new List<String>();
    public void Add(String part) {
        part.Add(part);
    }
    
    public void Show() {
        Console.WriteLine("\n产品 创建 ----");
        //列举所有的产品的部件
        foreach (String part in parts) {
            Console.WriteLine(part);
        }
    }
}
  • Builder类————抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。
abstract class Builder {
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}
  • ConcreteBuilder1类————具体建造者类。
class ConcreteBuilder1 : Builder {
    private Product product = new Product();
    
    public override void BuilderPartA() {
        product.Add("部件A");
    }
    
    public override void BuilderPartB() {
        product.Add("部件B");
    }
    
    public override Product GetResult() {
        return product;
    }
}
  • ConcreteBuilder2类————具体建造者类。
class ConcreteBuilder2 : Builder {
    private Product product = new Product();
    
    public override void BuilderPartA() {
        product.Add("部件X");
    }
    
    public override void BuilderPartB() {
        product.Add("部件Y");
    }
    
    public override Product GetResult() {
        return product;
    }
}
  • Director类————指挥者类
class Director {
    public void Construct(Builder builder) {
        builder.BuilderPartA();
        builder.BuilderPartB();
    }
}
  • 客户端代码,客户不需知道具体的建造过程。
static void Main(String[] args) {
    Director director = new Director();
    Builder b1 = new ConcreteBuilder1();
    Builder b2 = new ConcreteBuilder2();
    
    //指挥者用ConcreteBuilder1的方法来建造产品
    director.Construct(b1);
    Product p1 = b1.GetResult();
    p1.Show();

    //指挥者用ConcreteBuilder2的方法来建造产品    
    director.Construct(b2);
    Product p2 = b2.GetResult();
    p2.Show();
}
  • 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
posted @ 2018-01-28 11:56  _sanjun  阅读(95)  评论(0编辑  收藏  举报