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


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

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

    首先是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即可。

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

  • 相关阅读:
    一款纯css3实现的鼠标经过按钮特效
    一款基于jquery漂亮的按钮
    一款仿ios7的switches开关按钮
    基于jquery的可拖动div
    一款基于jquery ui漂亮的可拖动div实例
    一款html5和css3实现的小机器人走路动画
    一款纯css3实现的图片3D翻转幻灯片
    纯css3实现图片三角形排列
    7款基于jquery的动画搜索框
    一款纯css3实现的机器人看书动画效果
  • 原文地址:https://www.cnblogs.com/homchou/p/3056537.html
Copyright © 2020-2023  润新知