首页 > 技术文章 > Builder(建造者)模式

wsylly 2014-02-28 14:48 原文

1、出现原因

 在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法很稳定。

2、结构图

3、现实的简易的例子

 

1客户找到包工头,要求建一个房子,

 

2包工头找到不同的建筑队(Builder)来建筑房子的每个部分,建好房子后,交付给客户

 

3客户不关心房子的建造细节,由包工头负责管理房子建造的细节 

 

4、代码演示

 

//字部分A
    public class A
    {
    }
    //字部分B
    public class B
    {
    }
    //要创建的复杂的对象产品
    public class Product
    {
        public A partA { set; get; }

        public B partB { set; get; }
    }
    //创建者
    public class Builder
    {
        private Product p = new Product();

        //将创建的方法公开给 外面,这样创建的顺序就可以由指导者决定
        public void CreatA()
        {
            p.partA = new A();
        }

        public void creatB()
        {
            p.partB = new B();
        }
        //最后得到创建的产品
        public Product GetResult()
        {
            return p;
        }
    }

    public class Directer
    {
        private Builder builder = new Builder();

        //具体的创建过程(子对象的创建顺序)由 指导者 来决定
        public void Contract()
        {
            builder.creatB();
            builder.CreatA();
        }
        public Product GetResult()
        {
            return builder.GetResult();
        }
    }

Builder模式

 

 

 

 

主函数调用:

 

1             Product p = null;//定义一个产品对象用来接收导者创建出来的产品
2             Directer directer = new Directer();
3             directer.Contract();//创建产品
4             p = directer.GetResult();

 

5、适用性

 

1、需要生成的产品对象有复杂的内部结构。 

 


2、需要生成的产品对象的属性相互依赖(可以通过Builder进行控制),建造者模式可以强迫生成顺序。 (生成顺序可以通过Builder进行控制

 

推荐阅读