创建型设计模式——工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
适用于
①当一个类不知道它所必须创建的对象的类的时候。
②当一个类希望由它的子类来指定它所创建的对象的时候。
③当类将创建对象的职责委托给多个帮助子类中的某一个。并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
类图如下

1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 //通过工厂创建子类 6 ConcreteProductA proA = (ConcreteProductA)new ProductACreator().Create(); 7 Console.WriteLine(proA.Name); 8 9 ConcreteProductB proB = (ConcreteProductB)new ProductBCreator().Create(); 10 Console.WriteLine(proB.Name); 11 } 12 }
1 /// <summary> 2 /// 抽象产品类 3 /// </summary> 4 internal abstract class Product 5 { 6 public abstract string Name { get; } 7 }
1 /// <summary> 2 /// 工厂方法类,提供一个抽象的创建对象方法 3 /// </summary> 4 internal abstract class Creator 5 { 6 //创建产品方法 7 public abstract Product Create(); 8 }
1 /// <summary> 2 /// 具体产品类A 3 /// </summary> 4 internal class ConcreteProductA : Product 5 { 6 public override string Name => "ProduceA"; 7 }
1 /// <summary> 2 /// 具体产品类B 3 /// </summary> 4 internal class ConcreteProductB : Product 5 { 6 public override string Name => "ProductB"; 7 }
1 /// <summary> 2 /// 具体工厂A,继承抽象工厂,用于创建具体对象A 3 /// </summary> 4 internal class ProductACreator : Creator 5 { 6 public override Product Create() 7 { 8 return new ConcreteProductA(); 9 } 10 }
1 /// <summary> 2 /// 具体工厂B,继承抽象工厂,用于创建具体对象A 3 /// </summary> 4 internal class ProductBCreator : Creator 5 { 6 public override Product Create() 7 { 8 return new ConcreteProductB(); 9 } 10 }

浙公网安备 33010602011771号