建造者模式:將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 [構建與表示分離,同構建不同表示]
假如乙個物件的構建很複雜,需要很多步驟。則可以使用建造者模式,將其構建物件和組裝成乙個物件這兩步給分開來。構建部分為(builder)和組織部分(director),實現了構建和裝配的解耦。
不同的構建器,相同的裝配也可以做出不同的物件。
相同的構建器,不同的裝配順序也可以做出不同的物件。
例如:現在要生產乙個汽車,會有很多零件,有了零件還需要把這些零件組裝成乙個完整的汽車。建造者模式就是將構建零件(builder)和組裝零件(director)兩個操作給分開。
與抽象工廠的區別:在建造者模式裡,有個指導者,由指導者來管理建造者,使用者是與指導者聯絡的,指導者聯絡建造者最後得到產品。即建造模式可以強制實行一種分步驟進行的建造過程。
**的具體實現:宇宙飛船的實現
1、假如現在要構建乙個宇宙飛船物件,先定義乙個宇宙飛船物件,有一些簡單的屬性。
/*** 宇宙飛船
*/public class airship
//軌道艙
class orbitalmodule
//發動機
class engine
//逃逸塔
class escapetower
2、有了以上屬性後,接下來就可以將飛船中部分零件給構建出來了。為了以後構建不同種類的飛船,這裡使用介面來定義構建。有什麼型別的飛船就用什麼
類來實現該介面。
/*** 構建介面:用來構建airshipz中元件的介面
*/public inte***ce airshipbuilder
3、把這些零件構建完成後,就需要把構建好的這些元件構建成乙個完整的飛船(airship)了。使用介面來定義,不同型別的飛船組裝可以用不同的具體實現。
/*** 組裝介面:用於將飛船元件組裝起來
*/public inte***ce airshipdirector
4.1、 飛船的構建的實現
/*** 具體飛船的構造
*/public class fzairshipbuilder implements airshipbuilder
@override
public orbitalmodule builderorbitalmodule()
@override
public escapetower builderescapetower()
}4.2、 具體飛船的組裝實現:這裡需要注意,組裝是需要依賴於構建的(飛船的完整組裝需要飛機的各部件構建成功才能組裝)
/*** 具體飛船的組裝
*/public class fzairshipdirector implements airshipdirector
/*** 組裝具體的物件,為了簡單,這裡的組裝步驟比較簡單。實際產品中較複雜
*/@override
public airship directorairship()
}5、在我們客戶具體使用的時候,只需要知道構建介面、組裝介面和乙個飛船物件,我們根本不需要知道內部怎麼組裝的,內部有多少零件。
只需要知道怎麼使用組裝即可。
public static void main(string args)
結果如下:
萬能牌發動機
萬能牌逃逸塔
萬能牌軌道艙
如果乙個物件的構建很複雜,需要很多步驟,則考慮使用建造者模式,把物件的構建和最後的組裝分離開來。
在平常使用的類中如果字尾為builder則就是建造者模式
stringbuilder類的apend方法
sql中的preparedstatement
jdom中的dombuilder、saxbuilder
Builder 建造者模式
模式定義 builder模式很好地將乙個複雜物件的建立與該物件內部的各個部件的組裝分離開來。它和 abstract factory模式有相似的地方,但是abstract factory主要提供了乙個建立一些列相關或相互依賴的物件的介面,無需知道指定他們具體的類 生產者 而builder模式著重於部件...
建造者模式(Builder)
工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 還和前面一樣,乙個sender介面,兩個實現類mailsender和smssende...
建造者模式(Builder)
4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 建造者類如下 抽象產品類,使用了模板方法模式,不同產...