23種設計模式之 建造者模式

2022-07-05 08:42:13 字數 2897 閱讀 1902

又是乙個週三,快要下班了,老大突然拉住我,喜滋滋的告訴我:「xx公司很滿意我們做的模型,又簽訂了乙個合同,把賓士、寶馬的車輛模型都交給我們公司製作了,不過這次又額外增加了乙個需求:汽車的啟動、停止、喇叭聲音、引擎聲音都由客戶自己控制,他想什麼順序就什麼順序, 這個沒問題吧?」

又是乙個時間緊,工程量大的專案。首先,我們分析一下需求,賓士、寶馬都是乙個產品,它們有共有的屬性,xx公司關心的是單個模型的執行過程:賓士模型a先有引擎聲音,然後再響喇叭;賓士b是先啟動起來,然後再有引擎聲音,這才是xx公司要關心的。那到我們老大這邊呢,就是滿足人家的要求,要什麼順序就立馬能產生什麼順序的模型出來,我就負責老大的要求實現出來,而且還要批量的,也就是說xx公司下單訂購寶馬a車模,我們老大馬上就找我「生產乙個這樣的車模, 啟動完畢後,喇叭響一下」,然後我們就準備開始批量生產這些模型。

看起來需求還是比較複雜,我們乙個個解決,先從產品類入手。

}carmodel的設計原理是這樣的,setsequence方法是允許客戶自己設定乙個順序,是要先啟動響一下喇叭再跑起來,還是要先響一下喇叭再啟動。對於乙個具體的模型永遠都固定的,但是對於n多個模型就是動態的了。在子類中實現父類的基本方法,run方法讀取sequence, 然後遍歷sequence中的字元呂,哪個字串在先,就先執行哪個方法。

賓士模型**:

public

class benzmodel extends

carmodel

@override

protected

void

engineboom()

@override

protected

void

start()

@override

protected

void

stop()

}

寶馬模型**:

public

class bwmmodel extends

carmodel

@override

protected

void

engineboom()

@override

protected

void

start()

@override

protected

void

stop()

}

兩個產品類實現都完成,我們來模擬一下xx公司的要求:生產乙個賓士模型,要求跑的時候,先發動引擎,然後再掛擋啟動,然後停下來,不需要喇叭。

public

class

client

}

看, 我們組裝了這樣的一輛汽車,滿足了xx公司的需求。但是想想我們的需求, 汽車動作順序是要能夠隨意調整的。所有我們應該為產品模型定義乙個建造者,你要啥順序直接告訴建造者,由建造者建造。

這樣才以批量生產某種型別的汽車。

}現在我們生產同一種型別的汽車就容易多了

public

class

client

}

我們做專案時,經常會有乙個共識:需求是無底洞,是無理性的,不可能你告訴它不增加需求就不增加,這4個過程(start,stop,alarm,engineboom)按照排列組合有很多種,xx公司可以隨意組合,它要什麼順序的車模我就必須生成什麼順序的車輛,客戶就是上帝,所有我們應該找乙個導演,指揮各個事件的先後順序,然後為每種順序指定乙個**,你說一種我們立刻給你生產處理。

23種設計模式之建造者模式

建造模式的本質 分離了物件子元件的單獨構造 有builder來負責 和裝配 由diretor負責 從而可以構造出複雜的物件。這種模式適用於 某個物件的構建過程複雜的情況下使用。由於實現了構建和裝配的解耦。不同的構建器,相同的裝配,也可以做出不同的物件 相同的構建器,不同的裝配順序也可以做出不同的物件...

23種設計模式之建造者模式

主要作用 在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。使用者只需要給出指定複雜物件的型別和內容,建造者模式負責按順序建立複雜物件 把內部的建造過程和細節隱藏起來 例子 角色分析 建圖紙 記錄建房的方法,步驟 抽象的建造者 方法 public abstract class bu...

23種設計模式之建造者模式

建造者模式也叫生成器模式,定義如下 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 類圖如下 在建造者模式中,四個角色如下 product 產品類 通常是實現了模板方法模式,也就是有模板方法和基本方法 builder 抽象建造者 規範產品的組建,一般是由子類實現 concr...