简介
将一个复杂的对象一步一步的创建,每个属性采用组装完成
产品组成部分必须相同,如电脑的组装,各个部件都是需要的
建造者模式关心的组装,工厂模式关心的是创建,两者可以结合使用
主要模块
- 产品
- 指挥官
- 抽象建造者
- 具体建造者
例子
产品
//产品是一个电脑
public class Computer {
//cpu -->可能是一个对象,这个使用String模拟
private String cpu;
//内存-->可能是一个对象,这个使用String模拟
private String memory;
//磁盘-->可能是一个对象,这个使用String模拟
private String disk;
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void setDisk(String disk) {
this.disk = disk;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", memory='" + memory + '\'' +
", disk='" + disk + '\'' +
'}';
}
}
指挥官
//指挥,组装电脑的人
public class Director {
//需要一个具体建造者
private AbstractBuilder builder;
//构造方法
public Director(AbstractBuilder builder) {
this.builder = builder;
}
//建造对象
public Computer construct(){
//构造产品属性
builder.builderCpu();
builder.builderDisk();
builder.builderMemory();
return builder.getComputer();
}
}
抽象建造者
public abstract class AbstractBuilder {
//用收保护的对象,保证子类可以继承
protected Computer computer = new Computer();
//三个抽象方法
public abstract void builderCpu();
public abstract void builderMemory();
public abstract void builderDisk();
//返回对象
public Computer getComputer(){
return computer;
}
}
建造者(DELL)
//戴尔建造对象
public class DellBuilder extends AbstractBuilder {
@Override
public void builderCpu() {
computer.setCpu("Dell cpu 2核");
}
@Override
public void builderMemory() {
computer.setMemory("Dell 内存 4G");
}
@Override
public void builderDisk() {
computer.setDisk("Dell 磁盘 500G");
}
}
建造者(ASUS)
public class AsusBuilder extends AbstractBuilder {
@Override
public void builderCpu() {
computer.setCpu("Asus cpu 4核");
}
@Override
public void builderMemory() {
computer.setMemory("Asus 内存 8G");
}
@Override
public void builderDisk() {
computer.setDisk("Asus 磁盘 1T");
}
}
测试
public class Main {
public static void main(String[] args) {
//建造者
DellBuilder builder = new DellBuilder();
//指挥官
Director director = new Director(builder);
//创建对象
Computer computer = director.construct();
System.out.println(computer);//Computer{cpu='Dell cpu 2核', memory='Dell 内存 4G', disk='Dell 磁盘 500G'}
//建造者
AsusBuilder builder1 = new AsusBuilder();
//指挥官
Director director1 = new Director(builder1);
//创建对象
Computer computer1 = director1.construct();
System.out.println(computer1);//Computer{cpu='Asus cpu 4核', memory='Asus 内存 8G', disk='Asus 磁盘 1T'}
}
}