• C#设计模式---工厂方法模式


    24种常用设计模式

    创建型模式:抽象工厂、生成器、工厂方法、原型、单例;

    结构型模式:适配器、桥接、组合、装饰、外观、享元、代理;

    行为模式:责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者;

    工厂方法模式:是一种创建型设计模式,其在父类中指定一个创建对象的方法,允许子类决定实例化对象的类型。

    使用场景

    当你在编写代码时,如果无法确切预知对象的确切类别以及依赖关系时,可以选择使用工厂方法模式;

    工厂方法将创建产品的代码和使用产品的代码分离,从而能在不影响其它代码的使用情况下扩展产品创建部分的代码;

    如果你希望用户能够扩展你的软件库或框架内部组件;

    工厂方法的优缺点

    优点:可以避免创建者和具体产品之间的耦合;单一职责原则,将产品创建代码放在程序单一位置,使代码更容易维护;开闭原则,无需更改现有客户端代码,就可以在程序中引入新的产品功能。

    缺点:需要引入许多新的子类,代码可能会变得复杂。

    识别方法

    工厂方法通过构建方法来识别,它会创建具体类的对象,但以抽象类型或接口的形式返回这些对象。

    代码实现

    工厂抽象类

    1. abstract class Creator
    2. {
    3. public abstract IProduct FactoryMethod();
    4. public string SomeOperation()
    5. {
    6. var product = FactoryMethod();
    7. var result = "Creator: The same creator's code has just worked with " + product.Operation();
    8. return result;
    9. }
    10. }

    具体工厂子类实现

    1. class ConcreteCreator1 : Creator
    2. {
    3. public override IProduct FactoryMethod()
    4. {
    5. return new ConcreteProduct1();
    6. }
    7. }
    8. class ConcreteCreator2 : Creator
    9. {
    10. public override IProduct FactoryMethod()
    11. {
    12. return new ConcreteProduct2();
    13. }
    14. }

    产品接口

    1. public interface IProduct
    2. {
    3. string Operation();
    4. }

    具体产品实现类

    1. class ConcreteProduct1 : IProduct
    2. {
    3. public ConcreteProduct1() { }
    4. public string Operation()
    5. {
    6. return "Result of ConcreteProduct1";
    7. }
    8. }
    9. class ConcreteProduct2 : IProduct
    10. {
    11. public string Operation()
    12. {
    13. return "Result of ConcreteProduct2";
    14. }
    15. }

    客户端

    1. class Client
    2. {
    3. public void Main()
    4. {
    5. Debug.WriteLine("App: Launched with the ConcreteCreator1.");
    6. ClientCode(new ConcreteCreator1());
    7. Debug.WriteLine("");
    8. Debug.WriteLine("App: Launched with the ConcreteCreator2.");
    9. ClientCode(new ConcreteCreator2());
    10. }
    11. public void ClientCode(Creator creator)
    12. {
    13. // ...
    14. Debug.WriteLine("Client: I'm not aware of the creator's class," +
    15. "but it still works.\n" + creator.SomeOperation());
    16. // ...
    17. }
    18. }

  • 相关阅读:
    pinia 模块划分
    2024年的网络安全/黑客入门学习路线图
    基于协作搜索算法的函数寻优及工程优化
    ubuntu 安装docker
    RabbitMQ集群搭建
    C和C++教程
    Matlab数值计算与符号计算3-新版
    低代码是开发的未来吗?浅谈低代码平台
    TCPIP网络编程第一章踩坑过程 bind() error connect() error
    Docker快速入门
  • 原文地址:https://blog.csdn.net/shanniuliqingming/article/details/136282252