-
定義
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離鸠项,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示鸥鹉。
-
使用場(chǎng)景
- 相同的方法蓖康,不同的執(zhí)行順序肿孵,產(chǎn)生不同的事件結(jié)果時(shí);
- 多個(gè)部件或零件胡嘿,都可以裝配到一個(gè)對(duì)象中蛉艾,但是產(chǎn)生的運(yùn)行結(jié)果又不相同時(shí);
- 產(chǎn)品類非常復(fù)雜衷敌,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能勿侯,這個(gè)時(shí)候使用建造者模式非常合適;
-
實(shí)現(xiàn)方式
利用Builder類來(lái)構(gòu)造A類的一個(gè)對(duì)象缴罗,并將A類的構(gòu)造方法私有化罐监,構(gòu)造函數(shù)參數(shù)只有Builder。實(shí)現(xiàn)代碼如下:
Phone.java
package com.design.builder;
public class Phone {
private String cpu;
private int ram;
private String screen;
private Phone(PhoneBuilder builder) {
this.cpu = builder.cpu;
this.ram = builder.ram;
this.screen = builder.screen;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public int getRam() {
return ram;
}
public void setRam(int ram) {
this.ram = ram;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public static class PhoneBuilder{
private String cpu;
private int ram;
//default screen
private String screen = "1280 * 720";
public PhoneBuilder cpu(String cpu){
this.cpu = cpu;
return this;
}
public PhoneBuilder ram(int ram){
this.ram = ram;
return this;
}
public PhoneBuilder screen(String screen){
this.screen = screen;
return this;
}
public Phone build(){
//default handle
if (ram == 0){
ram = 1024;
}
return new Phone(this);
}
}
}
App.java
package com.design.builder;
import com.design.builder.Phone.PhoneBuilder;
public class App {
public static void main(String[] args) {
Phone iphone = new PhoneBuilder()
.cpu("A7")
.ram(2048)
.screen("1136 * 720")
.build();
}
}
-
總結(jié)優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
- 良好的封裝性瞒爬,能夠生成多種多樣的對(duì)象
- 代碼簡(jiǎn)潔易讀
- 缺點(diǎn)
- 編寫麻煩弓柱,產(chǎn)生多余的Builder對(duì)象