创建型设计模式——工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。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     }
View Code
1     /// <summary>
2     /// 工厂方法类,提供一个抽象的创建对象方法
3     /// </summary>
4     internal abstract class Creator
5     {
6         //创建产品方法
7         public abstract Product Create();
8     }
View Code
1     /// <summary>
2     /// 具体产品类A
3     /// </summary>
4     internal class ConcreteProductA : Product
5     {
6         public override string Name => "ProduceA";
7     }
View Code
1     /// <summary>
2     /// 具体产品类B
3     /// </summary>
4     internal class ConcreteProductB : Product
5     {
6         public override string Name => "ProductB";
7     }
View Code
 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     }
View Code
 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     }
View Code

 

posted @ 2025-05-10 17:24  是铭不是明  阅读(13)  评论(0)    收藏  举报