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

     此文中以活字印刷的故事来类比面向对象程序设计,可谓见解独到:

      1、只需修改所改之字,谓之可维护;

      2、此间所刻之字今后可复用,谓之可复用;

      3、要加新的内容,可在原有的内容上加,谓之可扩展;

    此文以计算器的实现过程的逐步优化,逐步实现了分装、继承、多态,实现了业务逻辑和界面逻辑的分离,使得业务逻辑不仅可以用在windows上,在手机、PDA上面也可以用,真正实现了软件工程的可维护、可复用、可扩展。个人觉得简单工场模式的应用场景是:可将用于switch的操作的每个操作抽象为一个类,共同继承一个基类,再定义一个工厂类,在客户端调用工厂类即可得到具体的操作了。

    整个代码整理如下:

    业务逻辑:

    public class Operation
        {
            private double _numberA = 0d;
            private double _numberB = 0d;
    
            public double numberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }
    
            public double numberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
    
            public virtual double getResult()
            {
                double result = 0d;
                return result;
            }
        }
    
    class OperationAdd:Operation
        {
            public override double getResult()
            {
                double result = 0d;
                result = numberA + numberB;
                return result;
            }
        }
    
    class OperationSub:Operation
        {
            public override double getResult()
            {
                double result = 0d;
                result = numberA - numberB;
                return result;
            }
        }
    
    class OperationMul:Operation
        {
            public override double getResult()
            {
                double result = 0d;
                result = numberA * numberB;
                return result;
            }
        }
    
    class OperationDiv:Operation
        {
            public override double getResult()
            {
                if (0 == numberB)
                    throw new Exception("The divisor can't be zoro");
                double result = 0d;
                result = numberA / numberB;
                return result;
            }
        }
    
    public class OperationFactory
        {
            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

    界面逻辑:

    class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Console.Write("Please enter the number A:");
                    string strNumberA = Console.ReadLine();
                    Console.Write("Please enter the opeator(+,-,*,/)");
                    string strOperator = Console.ReadLine();
                    Console.Write("Please enter the number B:");
                    string strNumberB = Console.ReadLine();
    
                    Operation oper = OperationFactory.createOperation(strOperator);
                    oper.numberA=Convert.ToDouble(strNumberA);
                    oper.numberB=Convert.ToDouble(strNumberB);
                    string result = Convert.ToString(oper.getResult());
                    Console.WriteLine("The result is: " + result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error ocurrs:" + ex.Message);
                }
                Console.ReadLine();
            }
        }
    View Code
  • 相关阅读:
    [编程语言][java][java se]java泛型中? T K V E含义(学习)
    Effective C++ 第二版 10) 写operator delete
    Cocos2d-x C++调用Android弹出提示框
    面试宝典 问题记录
    送给初入大学的工科男们一篇童话
    二叉树遍历
    webservice的讲解
    在JNI中新开线程遇到问题
    jni调试3(线程调试env变量问题)
    eMMC(KLM8G2FE3B)
  • 原文地址:https://www.cnblogs.com/wwblog/p/3676875.html
Copyright © 2011-2022 走看看