標籤:
產生器模式:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
UML類圖:
構成:
1.Builder(介面/抽象類別)定義了建立一個產品Product的各個組件的方法,返回建立好的產品。
2.Director 調用Builder建立組件的方法,對產品的建立進行控制
3.ConcreteBuilder 實現/重寫 Builder的方法,負責建立Product各個組件
4.Product 被建立的對象
以手機為例,在這裡Builder使用抽象類別提供了,提供了空的方法作為預設的組件建立方法和建立、返回產品兩個方法,也可以定義為介面讓具體類去實現
abstract class Builder { public Phone phone { get; private set; } virtual public void createPhone() { phone = new Phone(); } virtual public void addCPU() { } virtual public void addMemory() { } virtual public void addScreen() { } virtual public Phone getPhone() { return phone; } }
一個產生蘋果手機的ConcreteBuilder
class AppleBuilder : Builder { override public void addCPU() { phone.CPU = "A7"; } override public void addMemory() { phone.Memory = "1GB"; } override public void addScreen() { phone.Screen = "LG 5.5\""; } }
Director負責調用Builder
class Director { public void createPhone(Builder builder) { builder.createPhone(); builder.addCPU(); builder.addMemory(); builder.addScreen(); } }
要產生的產品Phone
class Phone { public string CPU; public string Memory; public string Screen; public override string ToString() { return "CPU:"+CPU+"\nMemory:"+Memory+"\nScreen:"+Screen; } }
執行代碼
效果:
1.變更產品,只需定義一個新的ConcreteBuilder
2.Director對產品的構造過程可以精細控制(每個組件建立的先後順序?還有什嗎?)
設計模式C#實現(七)——產生器模式