建造者模式的本质:
分离了对象子组件的单独构造(由Builder类负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
建造者模式实现
public class Cellphone {
private Cpu cpu;//CPU
private OperateSystem os;//操作系统
private Memory memory;//内存
public Cpu getCpu() {
return cpu;
}
public void setCpu(Cpu cpu) {
this.cpu = cpu;
}
public OperateSystem getOs() {
return os;
}
public void setOs(OperateSystem os) {
this.os = os;
}
public Memory getMemory() {
return memory;
}
public void setMemory(Memory memory) {
this.memory = memory;
}
}
/**
* CPU
*/
class Cpu {
private String name;
public Cpu(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 操作系统
*/
class OperateSystem {
private String name;
public OperateSystem(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 内存
*/
class Memory {
private String name;
public Memory(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
*构建者接口
*/
public interface CellphoneBuilder {
Cpu builderCpu();
OperateSystem builderOperateSystem();
Memory builderMemory();
}
public class IPhoneBuilder implements CellphoneBuilder{
public Cpu builderCpu() {
System.out.println("构建苹果的CPU: A8+M8");
return new Cpu("A8+M8");
}
public Memory builderMemory() {
System.out.println("构建苹果的内存:三星1GB内存");
return new Memory("三星1GB内存");
}
public OperateSystem builderOperateSystem() {
System.out.println("构建苹果的操作系统:IOS 8.0");
return new OperateSystem("IOS 8.0");
}
}
/**
*装配接口
*/
public interface CellphoneDirector {
/**
* 组装手机对象
*/
Cellphone directCellphone();
}
/**
*装配接口
*/
public class IPhoneDirector implements CellphoneDirector {
private CellphoneBuilder builder;
public IPhoneDirector(CellphoneBuilder builder) {
this.builder = builder;
}
/**
* 组装手机对象
*/
public Cellphone directCellphone()
{
Cpu cpu = builder.builderCpu();
Memory m = builder.builderMemory();
OperateSystem os = builder.builderOperateSystem();
Cellphone phone = new Cellphone();
phone.setCpu(cpu);
phone.setMemory(m);
phone.setOs(os);
return phone;
}
}
public class Client {
public static void main(String[] args) {
CellphoneDirector director = new IPhoneDirector(new IPhoneBuilder());
Cellphone iphone = director.directCellphone();
System.out.println(iphone.getOs().getName());
}
}