Java建造者模式
?
什么是建造者模式:建造者模式是設(shè)計模式的一種,將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
?
?
建造者模式優(yōu)點:
- 在建造者模式中,客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,相同的建造過程可以創(chuàng)建不同的產(chǎn)品對象
- 使用的不同的具體建造者就可以得到不同的產(chǎn)品對象,具體建造者之間相互獨立
- 可以更加驚喜的控制產(chǎn)品的創(chuàng)建過程
- 增加新的具體建造者無需修改原有的類庫代碼,指揮者類針對抽象建造者類編程,符合“開閉原則”
?
在這樣的設(shè)計模式中,有以下幾個角色: 1 builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口。 2 ConcreteBuilder:實現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件,定義并明確它所創(chuàng)建的表示,并 提供一個檢索產(chǎn)品的接口。 3 Director:構(gòu)造一個使用Builder接口的對象。 4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
?
例子:比喻我們構(gòu)建一個人類
public class Human {private String head; //頭部
private String body; //身體
private String hand; //手
private String foot; //腳
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getHand() {
return hand;
}
public void setHand(String hand) {
this.hand = hand;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
?
接口:一個定義了造人標(biāo)準(zhǔn)的接口
/* 看,一個接口定義好了。有各種造部位的方法,最后給個createHuman方法給你返回一個我們想要造的人。現(xiàn)在,人的類和造人的標(biāo)準(zhǔn)我們都定義好了。那我們可以先造一個人出來,先造一個高智商的人吧。 *///一個接口。一個定義了造人標(biāo)準(zhǔn)的接口。 public interface IBuildHuman {public void buildHead();public void buildBody();public void buildHand();public void buildFoot();public Human createHuman(); } 看,一個接口定義好了。有各種造部位的方法,最后給個createHuman方法給你返回一個我們想要造的人。 現(xiàn)在,人的類和造人的標(biāo)準(zhǔn)我們都定義好了。那我們可以先造一個人出來,先造一個高智商的人吧。 //實現(xiàn)接口 /* 這個高智商的造人過程自然是實現(xiàn)了IBuildHuman這個造人標(biāo)準(zhǔn)的接口了。然后就是set方法,最后返回造好的human。 */ public class SmartManBuilder implements IBuildHuman {Human human; public SmartManBuilder() {human = new Human(); }@Override public void buildHead() {human.setHead("智商180的頭腦"); }@Override public void buildBody() {human.setBody("新的身體"); }@Override public void buildHand() {human.setHand("新的手"); }@Override public void buildFoot() {human.setFoot("新的腳"); }@Override public Human createHuman() {return human;} }這個高智商的造人過程自然是實現(xiàn)了IBuildHuman這個造人標(biāo)準(zhǔn)的接口了。然后就是set方法,最后返回造好的human。
?
?
創(chuàng)建一個director類
/* 好的,其實到這里呢,我們已經(jīng)完成了建造的過程。那就這么簡單的建造過程,還搞了一個建造模式嗎?非也。 接下來,就是介紹建造者模式的精髓,那就是director。 這個director呢,就是來執(zhí)行我們剛才的造人動作的。沒錯,精髓就是我們剛才的造人動作。我們先看代碼: */ public class Director { public Human createHumanByDirecotr(IBuildHuman bh){bh.buildBody();bh.buildFoot();bh.buildHand();bh.buildHead();return bh.createHuman();} }?
?
//創(chuàng)建BuilderTest類
public class BuilderTest { public static void main(String[] args) {Director director = new Director();Human human =director.createHumanByDirecotr(new SmartManBuilder());System.out.println(human.getBody());System.out.println(human.getFoot());System.out.println(human.getHand());System.out.println(human.getHead());}
}
?
結(jié)果:
?
轉(zhuǎn)載于:https://www.cnblogs.com/nongzihong/p/10107608.html
總結(jié)
- 上一篇: Flutter入坑分享
- 下一篇: Java-InnerClass内部类