工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
这种模式的核心思想是将对象的创建过程与其使用过程分离,从而提高系统的灵活性和可扩展性。通过工厂方法模式,可以在不改变客户端代码的情况下,引入新的产品类型。
工厂方法模式的结构工厂方法模式通常包含以下几个角色:
Product(产品):定义工厂方法所创建的对象的接口。ConcreteProduct(具体产品):实现Product接口的具体类。Creator(创建者):声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的默认实现,返回一个默认的ConcreteProduct对象。ConcreteCreator(具体创建者):重写工厂方法以返回一个ConcreteProduct的实例。C#实现工厂方法模式下面是一个使用C#实现工厂方法模式的示例。
1. 定义产品接口public interface IProduct{ string GetName();}2. 定义具体产品public ConcreteProductA : IProduct{ public string GetName() {return "Product A"; }}public ConcreteProductB : IProduct{ public string GetName() {return "Product B"; }}3. 定义创建者public abstract Creator{ // 工厂方法 public abstract IProduct FactoryMethod(); // 业务逻辑 public void SomeOperation() { IProduct product = FactoryMethod(); Console.WriteLine("Created: " + product.GetName()); }}4. 定义具体创建者public ConcreteCreatorA : Creator{ public override IProduct FactoryMethod() {return new ConcreteProductA(); }}public ConcreteCreatorB : Creator{ public override IProduct FactoryMethod() {return new ConcreteProductB(); }}5. 客户端代码public Program{ public static void Main(string[] args) { Creator creatorA = new ConcreteCreatorA(); creatorA.SomeOperation(); // 输出: Created: Product A Creator creatorB = new ConcreteCreatorB(); creatorB.SomeOperation(); // 输出: Created: Product B }}运行结果运行上述代码后,控制台将输出:
Created: Product ACreated: Product B如下所示:

结果如下所示:

工厂方法模式通过将对象的创建过程封装在具体的创建者类中,使得系统更加灵活,易于扩展。当需要添加新的产品类型时,只需创建新的具体产品和具体创建者,而不需要修改现有的代码。这符合开闭原则(Open/Closed Principle),即对扩展开放,对修改关闭。