定義
將一個複雜對象的構建與它的表示分離,使得同樣的構造過程可以創建不同的表示。
建造者模式與工廠模式的區別
與工廠模式相比,建造者模式一般用來創建更複雜的對象,像是如果工廠模式是生產一隻滑鼠,建造者模式就是建造滑鼠的細節,像是微動開關的差異、滑鼠的材質那類的。
工廠模式是將對象的全部創建過程封裝在工廠類中,由工廠類向Client提供最終的產品,而建造者類只提供產品類中各個組件,將具體如何組裝、組裝順序交給導演(Director),然後組好的產品經由導演(Director)交給Client。
建造者UML圖
- Product - 產品類:產品的抽象類,可以再實作有哪些產品
- Builder -抽象類,規範產品的組建,一般是由子類實現具體的組件過程。
- ConcreteBuilder–因為每個建造的細節可能不一樣,所以實作Builder來做不同的建造細節
- Director - 導演,指揮組件該如何組起來
應用
這邊以創建角色為例,分為怪物跟NPC兩種的角色,兩個種類都會有武器、角色模型、角色的AI,兩種角色共同要設定的有要設定哪種AI、設定角色的模型、角色的武器。
創建一個共通的角色類別
1 | public class ICharacter |
而共通的製造細節,就放在抽象類Builder上
1 | public abstract class ICharacter_Builder |
而我們角色有分為兩種,一個是NPC跟怪物,這個具體要怎麼創建就在繼承於Builder的類上實作
1 | public class Enemy_Builder : ICharacter_Builder |
另外一個NPC類則是
1 | public class NPC_Builder : ICharacter_Builder |
在最後,交由一個導演(Director)來指示角色是如何被組起來的
1 | public class CharacterBuilderDirector |
現在有一個客戶(client)需要創建怪物的角色
1 | public class Client : MonoBehaviour |
看起來就會像是這個樣子
對應最上面的建造者模式的關係
ICharacter : Poduct
ICharacter_Builder : Builder抽象類
Enemy_Builder :Builder抽象類的實作
NPC_Builder:Builder抽象類的實作
CharacterBuilderDirector :Director