十三、Builder建造者模式

2018-10-28  本文已影响7人  Serenity那年

在实际的开发中,如果需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程产生出不同的表示的意图时,我们就需要使用“建造者模式”,又叫“生成器模式”。也就是说:构建的“过程”是稳定的,但是具体的构建“细节”是不同的。


如果使用了建造者模式,那么用户就只需要指定建造的类型就能够得到最终的结果,而具体的建造过程和细节就不需要知道了。

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

建造者模式结构图.png
一、Builder是什么?

/**
 * Created by serenitynanian on 2018/6/5.
 * 抽象建造者类,确定产品由两个部件PartA和PratB组成,并声明一个得到产品建造结果的方法getProduct()
 */

public abstract class Builder {
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract Product getProduct();
}
二、ConcreteBuilder是什么?
/**
 * Created by serenitynanian on 2018/6/5.
 *
 * 具体的建造类
 */

public class ConcreteBuildOne extends  Builder{

    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.add("部件A");
    }

    @Override
    public void buildPartB() {
        product.add("部件B");
    }

    @Override
    public Product getProduct() {
        return product;
    }
}

##### 三、Product是什么?
* 1.它是构造出的具体产品

/**

public class Product {

List<String> parts = new ArrayList<>();

public void add(String part) {
    parts.add(part);
}

public void show() {
    for (int i = 0; i < parts.size(); i++) {
        System.out.println("-----产品---部件---->"+parts.get(i));
    }
}

}


##### 四、Director是什么?
* 1.指挥者(Director):用它来控制建造过程,也用它来隔离用户与建造过程的关联;
* 2.它是构建一个使用Builder接口的对象;

/**

public class Director {

/**
 * 用来指挥建造过程
 * @param builder
 */
public void concreateBuilder(Builder builder){
    builder.buildPartA();
    builder.buildPartB();
}

}


##### 五、客户端使用过程

public class ClientTest {

public static void main(String[] args) {

    Director director = new Director();

    Builder b1 = new ConcreteBuildOne();
    Builder b2 = new ConcreteBuildTwo();

    //指挥者用ConcreteBuildOne的方法来创建产品
    director.concreateBuilder(b1);
    b1.getProduct();

    //指挥者用ConcreteBuildTwo的方法来创建产品
    director.concreateBuilder(b2);
    b2.getProduct();
}

}


##### 六、什么时间使用建造者模式呢?
主要是用于创建一些比较复杂的对象,这些对象内部构建的建造顺序是稳定的,但对象内部的构建通常面临着复杂的变化;

##### 总结
* 1.建造者模式是逐步建造产品的,所以建造者的Builder类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造;
上一篇下一篇

猜你喜欢

热点阅读