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

学习笔录——设计模式

工厂方法

简介

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

代码


    // 工厂方法接口
    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();

原文地址:https://www.cnblogs.com/caiyangcc/p/13040760.html