美文网首页
十三、Builder建造者模式

十三、Builder建造者模式

作者: Serenity那年 | 来源:发表于2018-10-28 21:31 被阅读7次

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


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

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

    建造者模式结构图.png
    一、Builder是什么?
    • 1.是为了创建一个Product对象的各个部件指定的抽象接口;
    
    /**
     * 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是什么?
    • 1.它是具体的建造者,实现Builder接口,构造和装配各个部件;
    /**
     * 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.它是构造出的具体产品
    

    /**

    • Created by serenitynanian on 2018/6/5.
    • 产品类,由多个部件组成
      */

    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接口的对象;
    
    

    /**

    • Created by serenitynanian on 2018/6/5.
    • 指挥者类
      */

    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类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造;

    相关文章

      网友评论

          本文标题:十三、Builder建造者模式

          本文链接:https://www.haomeiwen.com/subject/fcgpsftx.html