设计模式-构建者模式

南笙酒味 提交于 2019-12-14 23:48:02

**建造者(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();
}
}

 


测试结果:


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!