一、概述
在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的。生成器模式可以处理这类对象的构建,它提供了一种封装机制来隔离各类子对象的变化,从而保证系统的稳定。
二、生成器模式
生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其结构图如下:
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 }