概念
将一个复杂对象的构建与它的表示进行分离,使得同样的构建过程可以构建不同的表示
对于用户来讲可以不关注建造过程和细节
例如构建一台电脑,我们需要选择cpu 主板,硬盘等,然后开始组装,对于我们来讲我们需要的是一台电脑,至于怎么组装的我们不在意
建造者模式主要有几个角色
产品类:表示要创建的复杂对象,它是一个具体的类
builder抽象建造者:创建产品的抽象接口,一般至少有一个创建产品的抽象方法和返回产品的抽象方法
ConcrateBuilder实际建造者:实现builder类,实现抽象的所有方法,实现具体的建造细节。
DIrector 指挥者:分配不同的建造者来创建产品,统一组装流程。
实现
1、首先创建一个具体的产品类 computer
public class Computer {
private String cpu;//cpu
private String disk;//硬盘
private String board;//主板
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getDisk() {
return disk;
}
public void setDisk(String disk) {
this.disk = disk;
}
public String getBoard() {
return board;
}
public void setBoard(String board) {
this.board = board;
}
}
2、定义抽象建造者 组装的所有过程
public abstract class Builder {
public abstract void buildCPU(String cpu);//组装CPu
public abstract void buildDisk(String disk);//组装硬盘
public abstract void buildBoard(String board);//组装主板
public abstract Computer create();//返回组装好的电脑
}
3、创建实际建造者,实现具体的组装过程
public class ConcreateBuilder extends Builder {
Computer computer = new Computer();//创建产品实例
@Override
public void buildCPU(String cpu) {
computer.setCpu(cpu);
}
@Override
public void buildDisk(String disk) {
computer.setDisk(disk);
}
@Override
public void buildBoard(String board) {
computer.setBoard(board);
}
@Override
public Computer create() {
return computer;
}
}
4、定义指挥者类
public class Director {
private ConcreateBuilder mBuilder = null;
public Director(ConcreateBuilder builder){
this.mBuilder = builder;
}
public Computer build(String cpu,String disk,String board){
if(mBuilder!=null){
mBuilder.buildBoard(board);
mBuilder.buildCPU(cpu);
mBuilder.buildDisk(disk);
mBuilder.create();
}
return null;
}
}
5 测试方法,看实现结果
@Test
public void testBuilder(){
ConcreateBuilder builder = new ConcreateBuilder();
Director director = new Director(builder);
Computer computer = director.build("Intel","硬盘","主板");
System.out.println(computer);
}