建造者模式
一、什么是建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
三、建造者模式应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
package org.fbm.builder;
public class Computer {
//主板
private String mainBoard;
//内存
private String memory;
//硬盘
private String disk;
//处理器
private String cpu;
//显示器
private String display;
public String getMainBoard() {
return mainBoard;
}
public void setMainBoard(String mainBoard) {
this.mainBoard = mainBoard;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public String getDisk() {
return disk;
}
public void setDisk(String disk) {
this.disk = disk;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getDisplay() {
return display;
}
public void setDisplay(String display) {
this.display = display;
}
}
package org.fbm.builder;
public interface ComputerBuilder {
//造主板
public void makeMainBoard();
//造内存
public void makeMemory();
//造硬盘
public void makeDisk();
//造CPU
public void makeCpu();
//造显示器
public void makeDisplay();
//造电脑
public Computer getComputer();
}
package org.fbm.builder;
//经销商
public class Distributor {
public void sellComputer(ComputerBuilder builder){
builder.makeMainBoard();
builder.makeCpu();
builder.makeDisk();
builder.makeDisplay();
builder.makeMemory();
}
}
package org.fbm.builder;
public class HPComputer implements ComputerBuilder {
Computer computer = new Computer();
public void makeMainBoard() {
computer.setMainBoard("华硕的主板");
}
public void makeMemory() {
computer.setMemory("金士顿的内存");
}
public void makeDisk() {
computer.setDisk("西部数据的硬盘");
}
public void makeCpu() {
computer.setCpu("AMD CPU");
}
public void makeDisplay() {
computer.setDisplay("三星显示器");
}
public Computer getComputer() {
return computer;
}
}
package org.fbm.builder;
public class LenovoComputer implements ComputerBuilder {
Computer computer = new Computer();
public void makeMainBoard() {
computer.setMainBoard("华硕的主板");
}
public void makeMemory() {
computer.setMemory("三星的内存");
}
public void makeDisk() {
computer.setDisk("希捷的硬盘");
}
public void makeCpu() {
computer.setCpu("Intel CPU");
}
public void makeDisplay() {
computer.setDisplay("索尼显示器");
}
public Computer getComputer() {
return computer;
}
}
package org.fbm.builder;
public class MianClass {
public static void main(String[] args) {
ComputerBuilder Lenovo=new LenovoComputer();
ComputerBuilder HP=new HPComputer();
Computer computer=null;
Distributor distributor1=new Distributor();
distributor1.sellComputer(Lenovo);
computer=Lenovo.getComputer();
System.out.println(computer.getCpu()+"|"+computer.getMemory()+"|"+computer.getDisk()+"|"+computer.getMainBoard()+"|"+computer.getDisplay());
System.out.println("------------------------------------------");
Distributor distributor2=new Distributor();
distributor2.sellComputer(HP);
computer=HP.getComputer();
System.out.println(computer.getCpu()+"|"+computer.getMemory()+"|"+computer.getDisk()+"|"+computer.getMainBoard()+"|"+computer.getDisplay());
}
}