zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

    UML图

    namespace Study2014.CjModelDesign
    {
        /// <summary>
        /// 2014-5-19
        /// 简单封装 
        /// 过程式开发?
        /// </summary>
        public class Operation
        {
            public static double GetOldResult(double numberA, double numberB, string operate)
            {
                double result = 0;
                switch (operate)
                { 
                    case "+":
                        result = numberA + numberB;
                        break;
                    case "-":
                        result = numberA - numberB;
                        break;
                    case "*":
                        result = numberA * numberB;
                        break;
                    case "/":
                        if (numberB == 0)
                        {
                            throw new Exception("被除数不能为0");
                        }
                        result = numberA / numberB;
                        break;
                }
                return result;
            }
    
            //另一种写法
            public double NumberA
            {
                get;
                set;
            }
    
            public double NumberB
            {
                get;
                set;
            }
    
            public virtual double GetResult()
            {
                return 0;
            }
        }
    }
    View Code
    namespace Study2014.CjModelDesign
    {
        /// <summary>
        /// +操作 简单工厂
        /// </summary>
        public class OperationAdd:Operation
        {
            public override double GetResult()
            {
                return this.NumberA + this.NumberB;
            }
        }
    }
    View Code
    namespace Study2014.CjModelDesign
    {
        /// <summary>
        /// 除 操作 简单工厂
        /// </summary>
        public class OperationDiv:Operation
        {
            public override double GetResult()
            {
                if (this.NumberB == 0)
                {
                    throw new Exception("除数不能为0");
                }
                return this.NumberA / this.NumberB;
    
            }
        }
    }
    View Code
     public class OperationFactory
        {
            /// <summary>
            /// 简单工厂模式
            ///
            /// </summary>
            /// <param name="operate"></param>
            /// <returns></returns>
            public static Operation CreateOperation(string operate)
            {
                //多态
                Operation op = null;
                switch (operate)
                { 
                    case "+":
                        op = new OperationAdd();
                        break;
                    case "-":
                        op = new OperationSub();
                        break;
                    case "*":
                        op = new OperationMul();
                        break;
                    case "/":
                        op = new OperationDiv(); 
                        break;
                }
                return op;
            }
        }
    View Code

    总结一下这样写的好处

    1. 松耦合,后续增加其他的业务类(如:平方等),只需增加一个新的子类(从Operation继承),再修改工厂的代码(加个分支).
    2. 其他的没想到...
  • 相关阅读:
    通过数据归一化提高WPF绘图效率
    WPF 利用路径动画做一个环形加载动画
    WPF 实现简易事件聚合
    WPF 使用渐变色在绘图中灵活应用
    WPF 使用DrawingVisual和DispatchFrame快速提升绘图速度
    本地Nuget包管理
    飞腾芯片 中标麒麟 安装mysql
    飞腾平台 银河麒麟 安装nginx
    mysql8的配置优化
    国产化之路-国产操作系统安装.net core 3.1 sdk
  • 原文地址:https://www.cnblogs.com/sportdog/p/3745239.html
Copyright © 2011-2022 走看看