【设计模式&C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)

是一种创建型设计模式。
特点是解耦客户端对对象的创建,使用抽象的工厂类,让类的扩展更加容易,相比简单工厂模式更具有灵活性和扩展性。

优点:

  1. 工厂方法模式将对象的创建与使用分开,使客户端代码无需关心对象是如何创建的;
  2. 扩展性强,且符合开闭原则。需要添加新的实现类时,无需修改原有代码,只需添加一个相应的工厂类即可;
  3. 支持多态,在运行时子类可以被替换,从而支持多态编程;
  4. 易于修改和维护;
  5. 易于管理复杂的创建逻辑。

缺点:

  1. 工厂类增加,导致系统的复杂性增加;
  2. 导致类的层次结构更加复杂;

适用场景:

  1. 需要创建的产品种类较多的场景;
  2. 系统需要多次动态扩展产品时;
  3. 需要将类的实例化过程与客户端分离开。

示例:

cs 复制代码
public interface IAnimal
{
    void Speak();
}
cs 复制代码
public class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Woof! Woof!");
    }
}
cs 复制代码
public class Cat : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Meow! Meow!");
    }
}
cs 复制代码
/// <summary>
/// 抽象工厂类
/// </summary>

public abstract class AnimalFactory
{
    public abstract IAnimal CreateAnimal();
}
cs 复制代码
/// <summary>
/// 工厂实现类
/// </summary>
public class DogFactory : AnimalFactory
{
    public override IAnimal CreateAnimal()
    {
        return new Dog();
    }
}
cs 复制代码
/// <summary>
/// 工厂实现类
/// </summary>
public class CatFactory : AnimalFactory
{
    public override IAnimal CreateAnimal()
    {
        return new Cat();
    }
}
cs 复制代码
/// <summary>
/// 客户端
/// </summary>
public class Client
{
    public static void Main(string[] args)
    {   
        //用DogFactory创建dog对象
        AnimalFactory dogFactory = new DogFactory();
        IAnimal dog = dogFactory.CreateAnimal();
        dog.Speak();

        //CatFactory创建cat对象
        AnimalFactory catFactory = new CatFactory();
        IAnimal cat = catFactory.CreateAnimal();
        cat.Speak();
    }
}
相关推荐
ZeroToOneDev39 分钟前
Java(泛型和JUnit)
java·开发语言·笔记
许野平1 小时前
Rust:构造函数 new() 如何进行错误处理?
开发语言·后端·rust
先做个垃圾出来………2 小时前
如何培养自己工程化的能力(python项目)
开发语言·python
DKPT3 小时前
Java设计模式之开闭原则介绍与说明
java·设计模式·开闭原则
Hemy084 小时前
QT_QUICK_BACKEND 环境变量详解(AI生成)
开发语言·qt
艾莉丝努力练剑4 小时前
深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
c语言·开发语言·c++·学习
ts码农5 小时前
Aspose使用
c#·aspose
晨非辰6 小时前
#C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
c语言·开发语言·经验分享·学习·其他·学习方法·visual studio
赵英英俊6 小时前
Python day43
开发语言·python