建造者模式(Builder模式)

一掖举、模式的定義與特點

建造者模式(Builder):指將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以構建不同的表示

優(yōu)點

  • 各個具體的建造者相互獨立,有利于系統(tǒng)的擴展
  • 客戶端不必知道產品內部組成的細節(jié)熊镣,便于控制細節(jié)風險

缺點

  • 產品的組成部分必須相同扇雕,這限制了其使用范圍
  • 如果產品的內部變化復雜拓售,該模式會增加很多的建造者類

二、模式的結構與實現(xiàn)

建造者(Builder)模式由產品镶奉、抽象建造者础淤、具體建造者和指揮者4個要素構成

模式的結構

  • 產品角色(Product): 它是包含多個組成部件的復雜對象,由具體建造者來創(chuàng)建其各個部件
  • 抽象建造者(builder): 它是一個包含創(chuàng)建產品各個子部件的抽象方法的接口哨苛,通常還包含一個返回復雜產品的方法getResult()
  • 具體建造者(Concrete Builder):實現(xiàn)Builder接口鸽凶,完成復雜產品的各個部件的具體創(chuàng)建方法
  • 指揮者(Director):它調用建造者對象中的部件構造與裝配方法完成復雜對象的創(chuàng)建,在指揮者中不涉及具體產品的信息

模式的實現(xiàn)

  • 產品角色:包含多個組成部分的復雜對象
class Product 
{
    private String partA;
    private string partB;
    private String partC;
    public void setPartA(String partA)
    {
        this.PartA = partA;
    }
    public void setPartB(String partB)
    {
        this.partB = partB;
    }
    public void setPartc(String partC)
    {
        this.PartC = partC;
    }
    public void show()
    {
        //顯示產品的特征
    }
}
  • 抽象創(chuàng)建者:包含創(chuàng)建產品各個子部件的抽象方法
abstract class Builder
{
    //創(chuàng)建產品對象
    protected Product product = new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    // 返回產品對象
    public Product getResult()
    {
        return product;
    }
}
  • 具體創(chuàng)建者:實現(xiàn)了抽象創(chuàng)建者接口
public class ConcreteBuilder extends Builder
{
    public void buildPartA()
    {
        product.setPartA("建造 PartA");   
    }
    public void buildPartB()
    {
        product.setPartB("建造 PartB");
    }
    public void buildPartC()
    {
        product.setPartC("建造 PartC");
    }
}
  • 指揮者
class Director
{
    private Builder builder;
    public Director(Builder builder)
    {
        this.builder = builder;
    }
    //產品構建與組裝方法
    public Product construct()
    {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}
  • 客戶端
public class Client
{
    public static void main(String[] args)
    {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        product.show();
    }
}

三建峭、Golang實現(xiàn)建造者模式

package builder

type Builder interface {
    Part1()
    Part2()
    Part3()
} 

type Director struct {
    builder Builder
}

func NewDirector(builder Builder) *Director {
    return &Director{
        builder: builder,
    }
}

func (d *Director) Construct() {
    d.builder.Part1();
    d.builder.Part2();
    d.builder.Part3();
}

type Builder struct {
    result string
}

func (b *Builder) Part1() {
    b.result += "1"
}

func (b *Bulder) Part2() {
    b.result += "2"
}

func (b *Builder) Part3() {
    b.result += "3"
}

func (b *Builder) GetResult() string {
    return b.result
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末玻侥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亿蒸,更是在濱河造成了極大的恐慌凑兰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祝懂,死亡現(xiàn)場離奇詭異票摇,居然都是意外死亡,警方通過查閱死者的電腦和手機砚蓬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門矢门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事祟剔「舳悖” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵物延,是天一觀的道長宣旱。 經常有香客問我,道長叛薯,這世上最難降的妖魔是什么浑吟? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮耗溜,結果婚禮上组力,老公的妹妹穿的比我還像新娘。我一直安慰自己抖拴,他們只是感情好燎字,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阿宅,像睡著了一般候衍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洒放,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天蛉鹿,我揣著相機與錄音,去河邊找鬼拉馋。 笑死榨为,一個胖子當著我的面吹牛惨好,可吹牛的內容都是我干的煌茴。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼日川,長吁一口氣:“原來是場噩夢啊……” “哼蔓腐!你這毒婦竟也來了?” 一聲冷哼從身側響起龄句,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤回论,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后分歇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傀蓉,經...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年职抡,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬燎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谱净,靈堂內的尸體忽然破棺而出窑邦,到底是詐尸還是另有隱情,我是刑警寧澤壕探,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布冈钦,位于F島的核電站,受9級特大地震影響李请,放射性物質發(fā)生泄漏瞧筛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一导盅、第九天 我趴在偏房一處隱蔽的房頂上張望驾窟。 院中可真熱鬧,春花似錦认轨、人聲如沸绅络。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恩急。三九已至,卻和暖如春纪蜒,著一層夾襖步出監(jiān)牢的瞬間衷恭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工纯续, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留随珠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓猬错,卻偏偏與公主長得像窗看,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子倦炒,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內容