一.模式动机与定义
1.动机与定义
- 建造者模式是最复杂的创建型模式,它只关注产品本身,而不去过多关注产品如何搭建,类似于将所有部件装配在一个产品中。
- 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。即可以创建同一类型(指各个组成部件相同)的不同产品。
2.模式结构
Product(产品角色):一个具体的产品
Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类
ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件,返回相应的产品。
Director(指挥者):构建一个使用Builder的对象,用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
二.场景实例
-
背景:建造一台电脑,电脑类型有华为和联想,主要构件为主机和屏幕。
-
实例:
- 创建产品类型 Computer
public class Computer {
//主机
private String mainframe;
//屏幕
private String screen;
public Computer() {
}
public Computer(String mainframe, String screen) {
this.mainframe = mainframe;
this.screen = screen;
}
public String getMainframe() {
return mainframe;
}
public void setMainframe(String mainframe) {
this.mainframe = mainframe;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
@Override
public String toString() {
return "Computer{" +
"mainframe='" + mainframe + '\'' +
", screen='" + screen + '\'' +
'}';
}
}
- 创建抽象构建者 ComputerBuilder
public abstract class ComputerBuilder {
Computer computer=new Computer();
public void buildMainFrame(){
}
public void buildScreen(){
}
public Computer buildComputer(){
return computer;
}
}
- 创建具体建造者 BuilderHuaWei
public class BuildHuaWei extends ComputerBuilder{
@Override
public void buildMainFrame() {
computer.setMainframe("华为主机");
}
@Override
public void buildScreen() {
computer.setScreen("华为屏幕");
}
}
- 创建具体建造者 BuilderLegion
public class BuildLegion extends ComputerBuilder{
@Override
public void buildMainFrame() {
computer.setMainframe("联想主机");
}
@Override
public void buildScreen() {
computer.setScreen("联想屏幕");
}
}
- 创建指挥者 ComputerDirector
public class ComputerDirector {
public static Computer getComputer(ComputerBuilder computerBuilder){
computerBuilder.buildMainFrame();
computerBuilder.buildScreen();
return computerBuilder.buildComputer();
}
}
三.模式应用
1.总结
建造者模式重要的一点在于抽象构建者,这里定义了产品的具体配件以及配件的装配,而另一点则是指挥者,指挥者具体操作配件的装配顺序以及产品的实现。
其中心思想在于产品的框架,框架本体不变,但是产品的具体内容可以变换 ,例如构造一辆汽车,关注的是车子本身的框架(部件构成方式),而具体用什么轮胎,发动机等可以一直替换。
2.适应场景
建造者模式核心作用就是对复杂对象(特指某几个对象组合而成的对象)的创建,抽出来单独实现,对于用户使用这类复杂对象是提供了方便,同时,这也在复杂对象的部分创建与整体组装之间搭了一座桥,实现了部分和整体组装的解耦。在复杂对象创建时起着重要作用,对简单产品的用处不大。
3.建造者模式与抽象工厂模式的比较
- 建造者模式返回的是一个完整的组装好的产品,而抽象工厂模式返回一系列的产品,重点在于产品族。
- 抽象工厂模式生产汽车配件,而建造者模式就是汽车的组装工厂,生产完整的汽车。