前言
本章講解建造者設計模式的基本内容
方法
1.概念
經過前面兩種設計模式的學習我們不難發現,之前的建立型模型僅僅适合建立不是很複雜的對象!那麼現實生活中,總會有一些比較複雜的對象。比如電腦這個對象,其Monitor(顯示器)、Machine(機箱)、KeyBoard(鍵盤)就是其組成部分,這些組成部分又有其獨立的相關屬性,且組成的順序等都有講究,這時我們需要用到建造者設計模式解決這一問題。
建造者模式的本質就是将構造(Builder)和裝配(Director)分開進行,互相聯系建立對象。
2.建造者設計模式實作步驟
1)準備工作
建立工程如下:
其中有四個實體類,分别對應Computer(電腦)Monitor(顯示器)、Machine(機箱)、KeyBoard(鍵盤)
Computer代碼如下:
package creator;
public class Computer {
private Monitor monitor; //顯示器
private Machine machine; //主機
private KeyBoard keyBoard; //鍵盤
public Monitor getMonitor() {
return monitor;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
public Machine getMachine() {
return machine;
}
public void setMachine(Machine machine) {
this.machine = machine;
}
public KeyBoard getKeyBoard() {
return keyBoard;
}
public void setKeyBoard(KeyBoard keyBoard) {
this.keyBoard = keyBoard;
}
}
其中的顯示器代碼如下,剩下的三個類代碼諸如此類:
package creator;
public class Monitor {
private String name;
public Monitor(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2)設計構造器
與之前不同的是,這個構造器允許擁有多個建構不同元件的方法。單獨建構元件的方法又可以結合工廠設計模式進行使用。
我們設定電腦的建構者接口如下:
package creator;
public interface ComputerBuilder {
public Monitor builderMonitor();//建立顯示器
public Machine builderMachine();//建立主機
public KeyBoard builderKeyBoard();//建立鍵盤
}
接下來設計一種電腦的建構實作類,比如說惠普(HP)
package creator;
public class HPComputerBuilder implements ComputerBuilder {
@Override
public Monitor builderMonitor() {
System.out.println("我是惠普顯示器");
return new Monitor("惠普"); //注意:此處可以結合工廠設計模式使用
}
@Override
public Machine builderMachine() {
System.out.println("我是惠普主機");
return new Machine("惠普");
}
@Override
public KeyBoard builderKeyBoard() {
System.out.println("我是惠普鍵盤");
return new KeyBoard("惠普");
}
}
3)設定建造器
我們設定建構者的接口:
package creator;
public interface ComputerDirector {
public Computer createComputer();//組裝電腦
}
接下來我們設計其實作類來組裝我們的惠普電腦:
package creator;
public class HPComputerDirector implements ComputerDirector {
private ComputerBuilder builder;
public HPComputerDirector(ComputerBuilder builder) {
this.builder = builder;
}
@Override
public Computer createComputer() {
Monitor monitor = builder.builderMonitor();
Machine machine = builder.builderMachine();
KeyBoard keyBoard = builder.builderKeyBoard();
//組裝電腦,可考慮組建順序
Computer computer = new Computer();
computer.setMonitor(monitor);
computer.setMachine(machine);
computer.setKeyBoard(keyBoard);
return computer;
}
}
4)編寫測試類進行測試
package creator;
public class Test {
public static void main(String[] args) {
ComputerDirector director = new HPComputerDirector(new HPComputerBuilder());
Computer computer = director.createComputer();
System.out.println(computer.getMonitor().getName());
}
}
這就完美的實作了複雜對象的建立!!