十三、Builder建造者模式

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


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

建造者模式(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类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 感恩今日依然高效,做了很多事,还把上周欠的23期的学习给补上了。随喜自己又有了动力认真学习60期视频,因为我想帮助...
    寸心洁白阅读 120评论 4 4
  • 1.青海湖4-6月看鸟 7-8月油菜花 2.长白山林海 哈尔滨冰雕冬季 3.九寨沟 四季 4.长滩岛 11-2...
    后知后觉S阅读 215评论 0 0
  • 日精进打卡 姓名:熊艳红 公司:宁波蓝天白云供应链管理有限公司 【日精进打卡第179天】 【知~学习】 听书;听...
    熊熊Lv阅读 91评论 0 0
  • 姓名:宋潇~公司:广汉油脂 【日精进打卡第22天】 【知~学习】 《六项精进》0遍 共6遍 《大学》0遍 共20遍...
    宋潇同学阅读 136评论 0 0
  • 2017年7月15日 星期六 天气 热但有风 习惯了每天培训听课交作业的节奏,尽管今天没有了销售培训课程但是依然按...
    苹果姐姐阅读 265评论 0 0