1.最基本的模式
由四部分組成:
- 1.Builder
- 2.Director
- 3.ConcreateBuilder
- 4.Product
Product就是一個(gè)產(chǎn)品的模型,java中的javabean。ConcreateBuilder 就是為javabean設(shè)置參數(shù)。Builder就是把設(shè)置參數(shù)的接口抽象出來(lái)。Director就是調(diào)用ConcreateBuilder的方法。
我們舉個(gè)例子
假如我們要安裝一臺(tái)電腦,Product就是一個(gè)電腦的模型。把設(shè)置參數(shù)的接口抽象出來(lái)。讓ConcreateBuilder去實(shí)現(xiàn)接口并且設(shè)置參數(shù)。Director依次去調(diào)用設(shè)置參數(shù)的方法。
public class Computer {
private String cpu;
private String hd;
private String mainBoard;
//省略get set 方法
public interface IBuildComputer {
void setMainboard();
void setCpu();
void setHD();
Computer getComputer();
}
public class CreateComputer implements IBuildComputer {
Computer computer ;
public CreateComputer(){
computer = new Computer();
}
@Override
public void setMainboard() {
computer.setMainBoard("安裝主板");
}
@Override
public void setCpu() {
computer.setCpu("安裝cpu");
}
@Override
public void setHD() {
computer.setHd("安裝硬盤");
}
@Override
public Computer getComputer() {
return computer;
}
}
public class Director {
public Computer builder(IBuildComputer iBuildComputer){
iBuildComputer.setCpu();
iBuildComputer.setHD();
iBuildComputer.setMainboard();
return iBuildComputer.
測(cè)試類
public class ComputerTest {
public static void main(String[] args){
Director director = new Director();
Computer builder = director.builder(new CreateComputer());
System.out.print(builder.getCpu()+builder.getHd()+builder.getMainBoard());
}
}
2.上面是最基礎(chǔ)的模式,現(xiàn)在升級(jí)了一下,通過(guò)靜態(tài)內(nèi)部類實(shí)現(xiàn)零件的無(wú)序話構(gòu)造。
public class HighComputer {
public String cpu;
public String hd;
public String mainBoard;
public HighComputer(String cpu, String hd, String mainBoard){
this.cpu = cpu;
this.hd = hd;
this.mainBoard = mainBoard;
}
static class Builder {
private String cpu;
private String hd;
private String mainBoard;
public Builder setCpu(String cpu){
this.cpu = cpu;
return this;
}
public Builder setHD(String hd){
this.hd = hd;
return this;
}
public Builder setMainBoard(String mainBoard){
this.mainBoard = mainBoard;
return this;
}
public HighComputer build(){
return new HighComputer(cpu,hd,mainBoard);
}
}
}
測(cè)試類
HighComputer computer = new HighComputer.Builder().setCpu("i7")
.setHD("1G固態(tài)")
.setMainBoard("三無(wú)產(chǎn)品").build();
System.out.print(computer.cpu+computer.hd+computer.mainBoard);
優(yōu)點(diǎn):隱藏具體建造細(xì)節(jié),只需要簡(jiǎn)單配置參數(shù)就可以拿到產(chǎn)品。創(chuàng)建過(guò)程和產(chǎn)品本身解耦,易于維護(hù)和拓展,創(chuàng)建新的創(chuàng)造者無(wú)需修改產(chǎn)品,符合“開(kāi)閉原則”。
缺點(diǎn):1.建造者模式生產(chǎn)的產(chǎn)品,適合共同點(diǎn)較多的產(chǎn)品,使用范圍有局限性。2.如果產(chǎn)品內(nèi)部變化復(fù)雜,會(huì)創(chuàng)建不同的創(chuàng)建者,是系統(tǒng)龐大。