Loading... ## 简介 Builder Pattern:核心在于如何一步一步的构建一个包含多个组成部分的完整对象,使用相同的构建过程构建不同的产品。在软件开发中,如果需要创建复杂对象,可以考虑建造者模式。 与抽象工厂有点类似,但建造者模式返回的是一个完整的复杂产品,而抽象工厂模式只是返回同一抽象父类的各种具体子类。如果将抽象工厂模式看成一个汽车配件生产厂,生成不同类型的汽车配件。那么建造者模式就是一个汽车组装厂,通过对配件进行组装返回一个完整的汽车。 ---------- ## UML示例 ![建造者模式](https://s1.ax1x.com/2020/05/21/YbFqmR.png) ---------- ## 代码示例 ### 产品角色 ```java // 产品类 public class Product { private String partA; private String partB; private String partC; public String getPartC() { return partC; } public void setPartC(String partC) { this.partC = partC; } public String getPartB() { return partB; } public void setPartB(String partB) { this.partB = partB; } public String getPartA() { return partA; } public void setPartA(String partA) { this.partA = partA; } } ``` ### 抽象建造者 ```java // 抽象建造者 abstract class Builder { protected Product product = new Product(); public abstract void buildPartA(); public abstract void buildPartB(); public abstract void buildPartC(); public Product getResult(){ return product; } } ``` ### 具体建造者 ```java // 具体建造者 public class ConcreteBuilder extends Builder{ public void buildPartA() { product.setPartA("建造A部分"); } public void buildPartB() { product.setPartB("建造B部分"); } public void buildPartC() { product.setPartC("建造C部分"); } } ``` ### 导演者(指挥者) ```java //导演类 public class Director { private Builder builder; public Director(Builder builder){ this.builder = builder; } public void setBuilder(Builder builder){ this.builder = builder; } public Product construct(){ builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); return builder.getResult(); } } ``` ### 客户端 ```java public class Client { public static void main(String[] args) { Builder builder = new ConcreteBuilder(); Director director = new Director(builder); Product product = director.construct(); System.out.println(product.getPartA()); System.out.println(product.getPartB()); System.out.println(product.getPartC()); } } ``` 最后修改:2020 年 05 月 21 日 02 : 14 PM © 允许规范转载