• 设计模式-简单工厂模式


    在编程的过程中,尽可能的把代码的业务逻辑与界面分开,并且精心维护好自己的代码,经常去优化更新,这样可以提高以后的工作效率,在下次在写类似的功能的时候就可以将代码拿过来复用。

            面向对象的三大特效是封装,继承,多态,通过这3大特性可以把程序的耦合度降低,今天我要分享的设计模式叫”简单工厂模式“,用设计模式的好处是可以让程序变化的更加容易修改,更加容易复用。

            以计算器的程序为例子:

            封装业务类,将业务逻辑与界面分开,降低耦合度。

           首先封装一个运算类,定义一个GetResult的虚方法。

    /// <summary>
        ///运算类
        /// </summary>
        public class Operation
        {
            public double NumberA { get; set; }
    
            public double NumberB { get; set; }
    
            /// <summary>
            /// 定义一个虚方法
            /// virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
                 ///情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
                 ///情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
            /// </summary>
            /// <returns></returns>
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }

    然后定义各种运算的子类,继承Operation类,并重写GetResult方法

    /// <summary>
        /// 加法算法类
        /// </summary>
        class OperationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
         /// <summary>
        /// 减法算法类
        /// </summary>
        class operationSub : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA - NumberB;
                return result;
            }
        }
         /// <summary>
        /// 乘法算法类
        /// </summary>
        class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
        /// <summary>
        /// 除法算法类
        /// </summary>
        class OperationDiv : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB==0)
                {
                    throw new Exception("除数不能为0");
                }
                result = NumberA / NumberB;
                return result;
            }
        }

    然后在定义一个简单工厂类

    /// <summary>
        /// 简单工厂类
        /// 描述:简单工厂模式
        /// </summary>
        public class OperationFactory
        {
            public static Operation CreaterOperate(string operate)
            {
                Operation oper = null;
                switch (operate)
                {
                    case "+":
                        oper = new OperationAdd();
                        break;
                    case "-":
                        oper = new operationSub();
                        break;
                    case "*":
                        oper = new OperationMul();
                        break;
                    case "/":
                        oper = new OperationDiv();
                        break;
                }
                return oper;
            }
        }
    

     然后客户端代码如下,这样就完全把业务类与界面分离开了。现在这个计算器的程序就可以复用了,不管是Windows程序,Web版程序,或者是手机等需要用到计算器的软件都可以复用这样的代码。

    static void Main(string[] args)
            {
                Console.WriteLine("请输入一个数");
                double NumberA = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入运算符");
                string strOperate = Console.ReadLine();
                Console.WriteLine("请输入第二个数");
                double NumberB = Convert.ToDouble(Console.ReadLine());
                Operation oper;
                oper = OperationFactory.CreaterOperate(strOperate);
                oper.NumberA = NumberA;
                oper.NumberB = NumberB;
                double result = oper.GetResult();
                Console.WriteLine("结果{0}",result);
                Console.ReadKey();        
            }

    本人原创地址:http://www.goodtools123.com/contents/2/49.html

  • 相关阅读:
    递增三元子序列
    Linux sed 命令
    linux shell中$0,$?,$!等的特殊用法
    ansible-playbook使用
    Linux下通过crontab命令来实现定时任务
    iperf网络性能测试
    OpenStack接口测试工具rally/tempest环境搭建及使用
    Jenkins配置slaver节点
    微信小程序跳转外部链接(h5页面)以及数据交互
    Echarts 系列之折线图、柱状图相关配置
  • 原文地址:https://www.cnblogs.com/kksguijiao/p/11736288.html
Copyright © 2020-2023  润新知