總章目錄,設(shè)計(jì)模式(一)基本介紹
一、簡(jiǎn)介
建造者模式(Builder Pattern) 又名生成器模式,是一種對(duì)象構(gòu)建模式。它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái)(抽象類別),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象。
建造者模式 是一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它允許用戶只通過(guò)指定復(fù)雜對(duì)象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。
UML類圖:
1、抽象建造者(Builder):抽象接口或類,以規(guī)范產(chǎn)品對(duì)象的各個(gè)組成成分的建造。
2、具體建造者(ConcreteBuilder):1.實(shí)現(xiàn)抽象建造者Builder所聲明的接口,給出一步一步地完成創(chuàng)建產(chǎn)品實(shí)例的操作。2.在建造過(guò)程完成后,提供產(chǎn)品的實(shí)例。
3、指導(dǎo)者(Director):擔(dān)任這個(gè)角色的類調(diào)用具體建造者角色以創(chuàng)建產(chǎn)品對(duì)象。
4、產(chǎn)品(Product):產(chǎn)品便是建造中的復(fù)雜對(duì)象。

優(yōu)點(diǎn):
- 客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過(guò)程解耦,使得相同的創(chuàng)建過(guò)程可以創(chuàng)建不同的產(chǎn)品對(duì)象。
- 每一個(gè)具體建造者都相對(duì)獨(dú)立,而與其他的具體建造者無(wú)關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者, 用戶使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象 。
- 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過(guò)程 。將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過(guò)程更加清晰,也更方便使用程序來(lái)控制創(chuàng)建過(guò)程。
- 增加新的具體建造者無(wú)須修改原有類庫(kù)的代碼,指揮者類針對(duì)抽象建造者類編程,系統(tǒng)擴(kuò)展方便,符合 “開閉原則”
缺點(diǎn):
- 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),因此其使用范圍受限。
- 產(chǎn)品的內(nèi)部變化復(fù)雜,會(huì)導(dǎo)致系統(tǒng)變得很龐大。
二、實(shí)現(xiàn)
以下方式為簡(jiǎn)單的實(shí)現(xiàn),通常會(huì)在create時(shí)賦值,賦值時(shí)僅保存變量
public class Summoner {
private String shoes;
private String arms;
private String name;
//省略 get set
public static class Builder {
Summoner summoner;
public void Builder(){
summoner = new Summoner();
}
public Builder setArms(String arms) {
summoner.setArms(arms);
return this;
}
public Builder setShoes(String shoes) {
summoner.setShoes(shoes);
return this;
}
public Builder setName(String name) {
summoner.setName(name);
return this;
}
public Summoner build() {
return summoner;
}
}
}
public class client {
public static void main(String[] args) {
Summoner summoner = new Summoner.Builder()
.setName("武器大師")
.setArms("三相之力")
.setShoes("水銀鞋");
System.out.println(summoner.toString());
}
}