Java建造者模式
?
什么是建造者模式:建造者模式是設(shè)計(jì)模式的一種,將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
?
?
建造者模式優(yōu)點(diǎn):
- 在建造者模式中,客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過(guò)程解耦,相同的建造過(guò)程可以創(chuàng)建不同的產(chǎn)品對(duì)象
- 使用的不同的具體建造者就可以得到不同的產(chǎn)品對(duì)象,具體建造者之間相互獨(dú)立
- 可以更加驚喜的控制產(chǎn)品的創(chuàng)建過(guò)程
- 增加新的具體建造者無(wú)需修改原有的類庫(kù)代碼,指揮者類針對(duì)抽象建造者類編程,符合“開(kāi)閉原則”
?
在這樣的設(shè)計(jì)模式中,有以下幾個(gè)角色: 1 builder:為創(chuàng)建一個(gè)產(chǎn)品對(duì)象的各個(gè)部件指定抽象接口。 2 ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件,定義并明確它所創(chuàng)建的表示,并 提供一個(gè)檢索產(chǎn)品的接口。 3 Director:構(gòu)造一個(gè)使用Builder接口的對(duì)象。 4 Product:表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
?
例子:比喻我們構(gòu)建一個(gè)人類
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;
}
}
?
接口:一個(gè)定義了造人標(biāo)準(zhǔn)的接口
/* 看,一個(gè)接口定義好了。有各種造部位的方法,最后給個(gè)createHuman方法給你返回一個(gè)我們想要造的人。現(xiàn)在,人的類和造人的標(biāo)準(zhǔn)我們都定義好了。那我們可以先造一個(gè)人出來(lái),先造一個(gè)高智商的人吧。 *///一個(gè)接口。一個(gè)定義了造人標(biāo)準(zhǔn)的接口。 public interface IBuildHuman {public void buildHead();public void buildBody();public void buildHand();public void buildFoot();public Human createHuman(); } 看,一個(gè)接口定義好了。有各種造部位的方法,最后給個(gè)createHuman方法給你返回一個(gè)我們想要造的人。 現(xiàn)在,人的類和造人的標(biāo)準(zhǔn)我們都定義好了。那我們可以先造一個(gè)人出來(lái),先造一個(gè)高智商的人吧。 //實(shí)現(xiàn)接口 /* 這個(gè)高智商的造人過(guò)程自然是實(shí)現(xiàn)了IBuildHuman這個(gè)造人標(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;} }這個(gè)高智商的造人過(guò)程自然是實(shí)現(xiàn)了IBuildHuman這個(gè)造人標(biāo)準(zhǔn)的接口了。然后就是set方法,最后返回造好的human。
?
?
創(chuàng)建一個(gè)director類
/* 好的,其實(shí)到這里呢,我們已經(jīng)完成了建造的過(guò)程。那就這么簡(jiǎn)單的建造過(guò)程,還搞了一個(gè)建造模式嗎?非也。 接下來(lái),就是介紹建造者模式的精髓,那就是director。 這個(gè)director呢,就是來(lái)執(zhí)行我們剛才的造人動(dòng)作的。沒(méi)錯(cuò),精髓就是我們剛才的造人動(dòng)作。我們先看代碼: */ 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入坑分享
- 下一篇: 利用 Selenium 自动化 web