zoukankan      html  css  js  c++  java
  • 学习笔录——大话设计模式——工厂方法模式

    学习笔录——设计模式

    工厂方法

    简介

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

    代码

    
        // 工厂方法接口
        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();
    
    
  • 相关阅读:
    docker底层原理
    搭建docker私有镜像仓库harbor
    docker 网络详解
    从对集合数据去重到Distinct源码分析
    学习笔记(3)centos7 下安装RabbitMQ
    学习笔记(2)centos7 下安装mysql
    学习笔记(1)centos7 下安装nginx
    2.Redis的数据类型
    1.Redis介绍以及安装
    mongoDB的安装和配置
  • 原文地址:https://www.cnblogs.com/caiyangcc/p/13040760.html
Copyright © 2011-2022 走看看