一、概述
在軟件系統中,有時候面臨着復雜的對象創建,該對象由一定算法構成的子對象組成,由於需求變化,這些子對象會經常變換,但組合在一起的算法卻是穩定的。生成器模式可以處理這類對象的構建,它提供了一種封裝機制來隔離各類子對象的變化,從而保證系統的穩定。
二、生成器模式
生成器模式將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。其結構圖如下:

Builder為創建Product對象的各個子對象指定抽象接口。
ConcreteBuilder實現了Builder接口,用於創建Product對象的各個子對象。
Director使用Builder來創建Product對象。
Product表示被構造的復雜對象。
三、示例
我們以普通汽車和高級汽車的創建為例來展示一下生成器模式的應用。
首先創建抽象的Builder
1 interface ICarBuilder 2 { 3 void BuilderWheels(); 4 void BuilderWindows(); 5 }
接着創建普通汽車的Builder和高級汽車的Builder
1 public class BasicBuilder : ICarBuilder 2 { 3 public void BuilderWheels() 4 { 5 Console.WriteLine("Builder Basic Wheels"); 6 } 7 8 public void BuilderWindows() 9 { 10 Console.WriteLine("Builder Basic Windows"); 11 } 12 } 13 14 public class AdvancedBuilder : ICarBuilder 15 { 16 public void BuilderWheels() 17 { 18 Console.WriteLine("Builder Advanced Wheels"); 19 } 20 21 public void BuilderWindows() 22 { 23 Console.WriteLine("Builder Advanced Windows"); 24 } 25 }
然后創建汽車建造工廠,它使用Builder來創建不同種類的汽車
1 class CarFactory 2 { 3 public ICarBuilder Builder { get; set; } 4 5 public CarFactory(ICarBuilder builder) 6 { 7 Builder = builder; 8 } 9 10 public void CreateCar() 11 { 12 Builder.BuilderWheels(); 13 Builder.BuilderWindows(); 14 } 15 }
最后看一下如何調用
1 static void Main(string[] args) 2 { 3 CarFactory game = new CarFactory(new BasicBuilder()); 4 game.CreateCar(); 5 game.Builder = new AdvancedBuilder(); 6 game.CreateCar(); 7 Console.ReadLine(); 8 }
