**建造者(Builder)模式的定义:**
指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
该模式的主要**优点**如下:
各个具体的建造者相互独立,有利于系统的扩展。
客户端不必知道产品内部组成的细节,便于控制细节风险。
其**缺点**如下:
产品的组成部分必须相同,这限制了其使用范围。
如果产品的内部变化复杂,该模式会增加很多的建造者类。
**建造者模式注重零部件的组装过程**
构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,然后将这些部件组装在一起就形成了一台完整的电脑。
在编写代码之前:举一个例子理解一下建造者模式。
```
我们要建一个厂,要选地址,买材料,设计。很繁琐。
这个时候我们可以找一个包工队,我们只需要把需求告诉包工队,其他的事情,包工队来做。
简单的说,我们给“钱”,其他的一切,包工队来做。
```
用通俗的话来说,建造者模式的优势就是**把对象创建细节隐藏,使得使用者直接调用方法即可拿到对象,屏蔽了繁琐的操作。**
**模式的结构与实现**
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成,现在我们来分析其基本结构和实现方法。
```
产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
```
上述4要素下面用通俗的话来解释一下:
Director:控制者类,这是控制整个组合过程,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装;
Builder:构建者接口,定义各部件生成的方法;
ConcreteBuilder:具体构建者类:实现Builder构建者接口,具体定义如何生成各个部件;依赖于Product成品类,其中还有获取成品组装结构的方法GetResult()方法;
Product:成品类
**给一张建造者模式的结构图**
现在我们就以组装台式机为例来进行编码实现:
**4要素之——成品类**(包含多个组成部件的复杂对象)
```java
public class Computer {
List<String>hsyParts=new ArrayList<String>();
public void show(){
for(String s:hsyParts){
System.out.println(s);
}
}
}
```
**4要素之——构建者接口**(定义各部件生成的方法,通常还包含一个返回复杂产品的方法 getResult())
public interface Builder { void build_CPU(); void build_mainboard(); void build_memory(); void build_DISK(); void build_power(); Computer getComputer(); }
**4要素之——具体构建者类**(实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。)
public class BuliderImpl implements Builder { private Computer computer=new Computer(); @Override public void build_CPU() { computer.hsyParts.add("采用了AMD公司的CPU"); } @Override public void build_mainboard() { computer.hsyParts.add("采用了采用大型主版"); } @Override public void build_memory() { computer.hsyParts.add("采用了采用16G内存"); } @Override public void build_DISK() { computer.hsyParts.add("采用1TB固态硬盘"); } @Override public void build_power() { computer.hsyParts.add("采用itsyHao电源"); } @Override public Computer getComputer() { return computer; } }
**4要素之——具体控制者类**(**控制整个组合过程**,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装)
public class Director { public void construct(Builder builder){ builder.build_CPU(); builder.build_DISK(); builder.build_mainboard(); builder.build_power(); builder.build_memory(); } }
最后编写测试类(**客户类**)进行测试
**Clienter:测试类**
public class Clienter { public static void main(String[] args) { Builder builder=new BuliderImpl(); Director director=new Director(); director.construct(builder); builder.getComputer().show(); } }
测试结果:
来源:https://www.cnblogs.com/aimaogoudexiaohao/p/12040931.html