建造者模式:在构建一个复杂对象时,将他的构建与表示分离,使得同样的构建过程可以创建不同的表示。
比如:在构建一个Computer对象时,先构建它的显卡,CPU,主板等
Product
public class Computer {
private String cpu;
private String motherBoard;
private String videoCard;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getMotherBoard() {
return motherBoard;
}
public void setMotherBoard(String motherBoard) {
this.motherBoard = motherBoard;
}
public String getVideoCard() {
return videoCard;
}
public void setVideoCard(String videoCard) {
this.videoCard = videoCard;
}
}
抽象建造者
public interface ComputerBulider {
void bulidCpu();
void bulidMotherBoard();
void bulidVideoCard();
Computer buildComputer();
}
实体建造者
public class LenovoBulider implements ComputerBulider{
private Computer computer;
public LenovoBulider(){
computer = new Computer();
}
public void bulidCpu(){
computer.setCpu("联想电脑使用的CPU");
}
public void bulidMotherBoard(){
computer.setMotherBoard("联想电脑使用的主板");
}
public void bulidVideoCard(){
computer.setVideoCard("联想电脑使用的显卡");
}
public Computer buildComputer() {
return computer;
}
}
指导者
public class ComputerDirector {
public static Computer constructComputer(ComputerBulider bulider){
bulider.bulidCpu();
bulider.bulidMotherBoard();
bulider.bulidVideoCard();
return bulider.buildComputer();
}
}
使用实例
public class ComputerDemo {
public static void main(String[] args) {
Computer computer = ComputerDirector.constructComputer(new LenovoBulider());
System.out.println(computer.getCpu());
System.out.println(computer.getMotherBoard());
System.out.println(computer.getVideoCard());
}
}
验证输出:
联想电脑使用的CPU
联想电脑使用的主板
联想电脑使用的显卡
建造者模式中的产品扩展:加入我们现在需要一个苹果电脑,那我们只需要构建一个苹果的建造者,如下
MAC电脑的建造者
public class MacBulider implements ComputerBulider {
private Computer computer;
public MacBulider(){
computer = new Computer();
}
public void bulidCpu() {
computer.setCpu("Mac使用的CPU");
}
public void bulidMotherBoard() {
computer.setMotherBoard("MAC使用的主板");
}
public void bulidVideoCard() {
computer.setVideoCard("MAC使用的显卡");
}
public Computer buildComputer() {
return computer;
}
}
使用实例:
public class ComputerDemo {
public static void main(String[] args) {
Computer lenovoComputer = ComputerDirector.constructComputer(new LenovoBulider());
System.out.println(lenovoComputer.getCpu());
System.out.println(lenovoComputer.getMotherBoard());
System.out.println(lenovoComputer.getVideoCard());
Computer macComputer = ComputerDirector.constructComputer(new MacBulider());
System.out.println(macComputer.getCpu());
System.out.println(macComputer.getMotherBoard());
System.out.println(macComputer.getVideoCard());
}
}
验证输出:
联想电脑使用的CPU
联想电脑使用的主板
联想电脑使用的显卡
Mac使用的CPU
MAC使用的主板
MAC使用的显卡