某賽車遊戲,玩家能夠選擇不一樣的車,這些車實際上是採用不一樣性能的配件組成的,如:車胎、發動機等。
玩家選擇一部車,其實就是new了一部車。
你如何考慮「new car」的代碼?
要new這個車,可能須要先new出車的各個配件,而後將這些配件組合成car。
某些複雜對象要new出來時,每每須要先new出它的子對象,而後組裝成進父對象中,這些子對象有時候甚至組成了「樹」結構。
生成器模式就是用來解決這問題的。
賽車遊戲用生成器的解決方案:
CAR_Builder定義了增長車組件的幾個方法,還有CreateCar()方法。
BenZ_Builder類是具體生產奔馳車的類,該類集成了CAR_Builder,而且根據須要編寫了生產奔馳車的特有代碼。
同理,Ferrari_Builder是用來生產法拉利的,若是想增長更多的車品種,再增長一個類繼承CAR_Builder即可。
生成器的 類圖:
設計模式
直接看此圖會有點難以理解,請先理解上面的例子。
抽象類Builder的責任是創建各組件,CreateComponent()方法不必定只有一個的,可根據須要添加多個。
創建出來的組件多是樹形結構,Component與Leaf的關係就是表示這個意思。
各組件最終須要組合在一塊兒,最終咱們須要有一個相似CreateCar()的方法來獲得這個包含各組件的父對象。性能
做者:張傳波ui
創新工場創業課堂(敏捷課程)講師spa
軟件研發管理資深顧問設計
CMMI首席專家對象
《火球——UML大戰需求分析》做者blog
《硬啃設計模式》做者繼承
www.umlonline.org創辦人
遊戲