• 学习笔录——大话设计模式——工厂方法模式


    学习笔录——设计模式

    工厂方法

    简介

    定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。

    代码

    
        // 工厂方法接口
        public interface IOperationFactoryMethod
        {
             Operation CreateOperation();
        }
    
        // 加法创建工厂
        public class AddOperationFactoryMethod : IOperationFactoryMethod
        {
            public Operation CreateOperation()
            {
                return new AddOperation();
            }
        }
    
        // 加法
        public class AddOperation : Operation
        {
            public override double GetResult()
            {
                return base.NumA + base.NumB;
            }
        }
    
        // 客户端
        static void Main(string[] args)
        {
            // 工厂方法
            IOperationFactoryMethod method = new AddOperationFactoryMethod();
            Operation operation = method.CreateOperation();
            operation.NumA = 1;
            operation.NumB = 2;
            operation.GetResult();
    
            Console.Read();
        }
    
    

    个人理解,不足之处还请指教。

    简单工厂优点是客户端该使用哪个运算的实例,简单工厂会根据客户端选择的条件返回不同的实例。但是缺点也在于此,如果是我们把这些代码发布成一个nuget包,以后用户需要自定义一个除法运算方法,扩展起来需要修改工厂类,这样违背了开放封闭原则。而使用工厂方法用户只需自定义一个除法运算类(DivOperation)继承运算类(Operation),内部重写运算逻辑,再创建自定义运算创建除法工厂类(DivOperationFactoryMethod)实现工厂方法接口(IOperationFactoryMethod)返回自定义除法运算类(DivOperation),工厂方法其实就是很好的利用面向对象的继承,多态。

    工厂方法创建接口(IOperationFactoryMethod):

    
    // 多态,程序运行期间 决定了method引用指向了AddOperationFactoryMethod
    IOperationFactoryMethod method = new AddOperationFactoryMethod();
    // 多态 程序运行期间 决定了operation引用指向了method.CreateOperation() 即指向 new AddOperation();
     Operation operation = method.CreateOperation();
    
    
  • 相关阅读:
    诸暨集训游记
    P2678 跳石头
    P1577 切绳子
    P1328 生活大爆炸版石头剪刀布
    P1067 多项式输出
    分解因数
    【管理篇】团队组织与架构演进方法论
    【状态机】行为状体机和协议状态机
    【数据库】分库分表
    【OLAP】从数仓到Kappa架构
  • 原文地址:https://www.cnblogs.com/caiyangcc/p/13040760.html
Copyright © 2020-2023  润新知