zoukankan      html  css  js  c++  java
  • 《大话设计模式》第一章:简单工厂模式

    《大话设计模式》第一章:简单工厂模式 代码

    目标写一个计算器,第一个输入数字,第二个输入运算符号(+,-,*,/),第三个输入第二个数字,然后回车得到结果。

    首先是Operate类,2个属性,一个得到结果的方法。

        public class Operate
        {
            public Double strNumberA { get; set; }
            public Double strNumberB { get; set; }
            public virtual Double GetResult()
            {
                return 0;
            }
        }

    再是运算加的方法OperateAdd,继承于Operate,通过改写GerResult来实现不同运算,其余的雷同。

        public class OperateAdd : Operate
        {
            public override double GetResult()
            { return strNumberA + strNumberB; }
        }
        class OperateSub : Operate
        {
            public override double GetResult()
            {
                return strNumberA - strNumberB;
            }
        }
        class OperateMul : Operate
        {
            public override double GetResult()
            {
                return strNumberA * strNumberB;
            }
        }
        class OperateDiv : Operate
        {
            public override double GetResult()
            {
                if (strNumberB == 0)
                    throw new Exception("除数不能为0");
                return strNumberA / strNumberB;
            }
        }

     此时构造一个工厂类,通过运算符来实例化对应操作类。

        public class OperateFactory
        {
            /// <summary>
            /// 根据运算符来实例化对应操作方法
            /// </summary>
            /// <param name="strOperate"></param>
            /// <returns></returns>
            public static Operate CrateOperate(string strOperate)
            {
                Operate op = null;
                switch (strOperate)
                {
                    case "+": op = new OperateAdd(); break;
                    case "-": op = new OperateSub(); break;
                    case "*": op = new OperateMul(); break;
                    case "/": op = new OperateDiv(); break;
                }
                return op;
            }
        }

    入口函数如下:

            static void Main(string[] args)
            {
                string strOperate;
                Double strNumberA;
                Double strNumberB;
                strNumberA = Convert.ToDouble(Console.ReadLine());
                strOperate = Console.ReadLine();
                strNumberB = Convert.ToDouble(Console.ReadLine());
                Operate op;
                op = OperateFactory.CrateOperate(strOperate);
                op.strNumberA = strNumberA;
                op.strNumberB = strNumberB;
                try { Console.WriteLine("结果是:" + op.GetResult()); }
                catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); }
                Console.ReadKey();
            }

    如此写法,在添加功能的时候只用添加一个继承于Operate的类,改写GetResult方法,工厂适配器添加一个case即可。

    工厂模式运用非常广泛,封装,继承,多态,委托的灵活运用跟一个程序员是否真正了解到面向对象有直接的关系。

  • 相关阅读:
    知识搜索
    使用 getopt() 进行命令行处理
    【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 大V综合交流区 360论坛
    搜狗知立方高调亮相 开启知识计算新时代
    socat: Linux / UNIX TCP Port Forwarder
    Crontab 每两周执行一次
    python 命令行解析 optionparser
    crontab jojo's blog--快乐忧伤都与你同在 BlogJava
    搜索引擎开始「实体搜索」新领域竞争,Google、百度分别发力实体搜索产品
    netcat(nc)的替代产品 Socat
  • 原文地址:https://www.cnblogs.com/homchou/p/3056537.html
Copyright © 2011-2022 走看看