上一篇 <<<外觀/門面模式(Facade Pattern)
下一篇 >>>適配器模式(Adapter Pattern)
建造者模式:將一個復雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
特點:
a、需要生成的對象具有復雜的內(nèi)部結(jié)構(gòu)。
b、需要生成的對象內(nèi)部屬性本身相互依賴。
優(yōu)點:
1.使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié)。
2.具體的建造者類之間是相互獨立的,對系統(tǒng)的擴展非常有利。
3.由于具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產(chǎn)生任何影響。

- Builder:給出一個抽象接口,以規(guī)范產(chǎn)品對象的各個組成成分的建造。這個接口規(guī)定要實現(xiàn)復雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建。
- ConcreteBuilder:實現(xiàn)Builder接口,針對不同的商業(yè)邏輯,具體化復雜對象的各部分的創(chuàng)建。 在建造過程完成后,提供產(chǎn)品的實例。
- Director:調(diào)用具體建造者來創(chuàng)建復雜對象的各個部分,在指導者中不涉及具體產(chǎn)品的信息,只負責保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。
- Product:要創(chuàng)建的復雜對象。
應用場景
- a、StringBuilder
- b、mybatis的xml解析組裝
- c、OkHttpClient
Request request = new Request.Builder().url("http://www.jarye.cn").build();
與工廠模式的區(qū)別
a、工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產(chǎn)品集中起來進行管理,用來創(chuàng)建復合對象【指某個類具有不同的屬性】,
b、建造者模式更加關(guān)注與零件裝配的順序,其實就是前面抽象工廠模式和最后的Test結(jié)合起來得到的。
建造者模式的核心代碼
//產(chǎn)品角色 Computer
public class Computer {
private String brand;
private String cpu;
private String mainBoard;
private String hardDisk;
private String displayCard;
private String power;
private String memory;
// 省略 getter, setter, toString
}
//抽象建造者 builder
public abstract class Builder {
protected Computer computer = new Computer();
public abstract void buildBrand();
public abstract void buildCPU();
public abstract void buildMainBoard();
public abstract void buildHardDisk();
public abstract void buildDisplayCard();
public abstract void buildPower();
public abstract void buildMemory();
public Computer createComputer() {
return computer;
}
}
//具體建造者 DellComputerBuilder,ASUSComputerBuilder,分別建造戴爾電腦和華碩電腦
public class DellComputerBuilder extends Builder {
@Override
public void buildBrand() {
computer.setBrand("戴爾電腦");
}
@Override
public void buildCPU() {
computer.setCpu("i5-8300H 四核");
}
@Override
public void buildMainBoard() {
computer.setMainBoard("戴爾主板");
}
@Override
public void buildHardDisk() {
computer.setHardDisk("1T + 128GB SSD");
}
@Override
public void buildDisplayCard() {
computer.setDisplayCard("GTX1060 獨立6GB");
}
@Override
public void buildPower() {
computer.setPower("4芯 鋰離子電池 180W AC適配器");
}
@Override
public void buildMemory() {
computer.setMemory("4G + 4G");
}
}
//指揮者 ComputerDirector,指揮構(gòu)建過程
public class ComputerDirector {
public Computer construct(Builder builder) {
// 逐步構(gòu)建復雜產(chǎn)品對象
Computer computer;
builder.buildBrand();
builder.buildCPU();
builder.buildDisplayCard();
builder.buildHardDisk();
builder.buildMainBoard();
builder.buildMemory();
builder.buildPower();
computer = builder.createComputer();
return computer;
}
}
//客戶端測試
public class Test {
public static void main(String[] args) {
ComputerDirector director = new ComputerDirector();
Builder asusBuilder = new ASUSComputerBuilder();
Computer asusComputer = director.construct(asusBuilder);
System.out.println(asusComputer.toString());
Builder dellBuilder = new DellComputerBuilder();
Computer dellComputer = director.construct(dellBuilder);
System.out.println(dellComputer.toString());
}
}
相關(guān)文章鏈接:
<<<23種常用設計模式總覽
<<<代理模式(Proxy Pattern)
<<<裝飾模式(Decorator Pattern)
<<<觀察者模式(Observer Pattern)
<<<單例模式(Singleton Pattern)
<<<責任鏈模式(Chain of Responsibility Pattern)
<<<策略模式(Strategy Pattern)
<<<模板方法模式(Template Pattern)
<<<外觀/門面模式(Facade Pattern)
<<<適配器模式(Adapter Pattern)
<<<原型模式(Prototype Pattern)
<<<工廠相關(guān)模式(Factory Pattern)