大话设计模式之简单工场模式

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

  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

 

你可能感兴趣的:(设计模式)