zoukankan      html  css  js  c++  java
  • 工厂方法模式

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

    仔细观察会发现,工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单的工厂内部逻辑判断移到客户端代码来进行,你想要加载的功能,本来是该工厂类,而现在是修改客户端

    下面是小案例

    假设现在要进行计算器的运算,会首先存在一个运算类,包含数字A和数字B,还有一个虚方法返回结果

    namespace Study.Factory
    {
        /// <summary>
        /// 运算类
        /// </summary>
       public class Operation
        {
            private double _numberA = 0;
            private double _numberB = 0;
    
            public double NumberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }
            public double NumberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
    
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
    }
    

     然后定义具体的运算子类,具体实现运算方法(其他计算方法类似)

    namespace Study.Factory
    {
        /// <summary>
        /// 加法
        /// </summary>
        class OpeationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
    }
    

    定义工厂接口

    namespace Study.Factory
    {
        interface IFactory
        {
            Operation CreateOperation();
        }
    }
    

      

    定义加法工厂实现接口,返回运算方法(同理,减法,乘法,除法依次类推)

    namespace Study.Factory
    {
        class FactoryAdd : IFactory
        {
            public Operation CreateOperation()
            {
                return new OpeationAdd();
            }
        }
    }
    

      

    最后客户端调用

     /// <summary>
            /// 工厂方法模式
            /// </summary>
            static void Factory()
            {
                Console.WriteLine("请输入数字A");
                double _numberA = double.Parse(Console.ReadLine());
                Console.WriteLine("请输入数字B");
                double _numberB = double.Parse(Console.ReadLine());
    
                //创建加法工厂
                IFactory fa = new FactoryAdd();
                //实例化具体的算法
                Operation oper = fa.CreateOperation();
                oper.NumberA = _numberA;
                oper.NumberB = _numberB;
                Console.WriteLine(oper.GetResult());
            }
        }
    

      

  • 相关阅读:
    创业公司必备的5款团队协作工具
    测试人必备:国内外最好用的6款Bug跟踪管理系统
    BUG克星:几款优秀的BUG跟踪管理软件
    千亿级SaaS市场:企业级服务的必争之地
    如何使用iClap创建普通批注
    详析手游圈从业人员必须知道的行业术语
    企业级服务元年:iClap高效解决手游更新迭代问题
    手游精品时代,iClap参会TFC高效解决手游问题
    全新办公方式,iClap引领企业级服务新浪潮
    vue自学小demo----前端
  • 原文地址:https://www.cnblogs.com/happygx/p/8392234.html
Copyright © 2011-2022 走看看