蓋房項目需求java
- 須要建房子:這一過程爲打樁、 砌牆、封頂
- 房子有各類各樣的,好比普通房,高樓,別墅,各類房子的過程雖然同樣,可是要求不要相同的.
傳統模式
傳統方式的缺點:
過於簡單,沒有設計緩存層對象,程序的擴展和維護很差. 也就
是說,這種設計方案,把產品(即:房子) 和 建立產品的過程(即:建房子流程) 封裝在一塊兒,耦合性加強了。
緩存
建造者模式
- 將產品和產品建造過程解耦 => 建造者模式
- 建造者模式(Builder Pattern) 又叫生成器模式,是一種對象構建模式。它能夠將複雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不一樣實現方法能夠構造出不一樣表現(屬性)的對象。
- 建造者模式 是一步一步建立一個複雜的對象,它容許用戶只經過指定複雜對象的類型和內容就能夠構建它們,用戶不須要知道內部的具體構建細節。
- 建造者模式所建立的產品通常具備較多的共同點,其組成部分類似, 若是產品之間的差別性很大,則不適合使用建造者模式,所以其使用範圍受到必定的限制
建造者模式的四個角色
- Product(產品角色): 一個具體的產品對象。
- Builder(抽象建造者): 建立一個Product對象的各個部件指定的 接口/抽象類。
- ConcreteBuilder(具體建造者): 實現接口,構建和裝配各個部件。
- Director(指揮者): 構建一個使用Builder接口的對象。它主要是用於建立一個
複雜的對象。它主要有兩個做用,一是:隔離了客戶與對象的生產過程,二是:
負責控制產品對象的生產過程。
解決房子思路
建造者模式和工廠模式對比
抽象工廠模式實現對產品家族的建立,一個產品家族是這樣的一系列產品:具備不一樣分類維度的產品組合,採用抽象工廠模式不須要關心構建過程,只關心什麼產品由什麼工廠生產便可。app
而建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是經過組裝配件而產生一個新產品ui
JDK源碼:StringBuilder
對於下面這句,咱們進到StringBuilder類
spa
StringBuilder stringBuilder = new StringBuilder("hello,world");
能夠看到它繼承了AbstractStringBuilder
StringBuilder 即充當了指揮者角色,同時充當了具體的建造者, 建造方法的
實現是由 AbstractStringBuilder 完成, 而StringBuilder 繼承了
AbstractStringBuilder
AbstractStringBuilder實現了Appendable,AbstractStringBuilder其實實現了append方法,已是建造者,只是不能實例化
Appendable 是最後定義方法的,定義了多個append方法(抽象方法), 即Appendable 爲抽象建造者, 定義了抽象方法
設計