大话设计模式--简单工厂模式

  通过简单工厂模式  更加熟悉面向对象编程。对面向工程编程有了一定的认识。

  简单工厂模式 通俗点讲就是 通过一个单独的类来构造实例对象的过程 就是工厂

      通过小菜鸟和大鸟之间的对话 熟悉了学习了简单工厂模式 计算器版本的更新

 

 

      第一版计算器  也是我会写出来的计算器 我的思路 面向过程编程

     

 Console.WriteLine("请输入第一个数");
            string OneStr = Console.ReadLine();
            decimal OneNumber = Convert.ToDecimal(OneStr);
            Console.WriteLine("请输入第二个数");
            string TwoStr = Console.ReadLine();
            decimal TwoNumber = Convert.ToDecimal(TwoStr);
            Console.WriteLine("请输入运算符");
            string Operate = Console.ReadLine();
            decimal Resualt = 0;
         

            switch (Operate)
            {
                case "+":
                    Resualt = OneNumber + TwoNumber;
                    break;
                case "*":
                    Resualt = OneNumber * TwoNumber;
                    break;
                case "-":
                    Resualt = OneNumber - TwoNumber;
                    break;
                case "/":
                    if (TwoNumber == 0)
                    {

                        Console.WriteLine("除数不能为零!");
                    }
                    else
                    {
                        Resualt = OneNumber / TwoNumber;

                    }
                    break;
            }

 

      第二版计算器 面向对象编程(业务和逻辑分离) 封装

    

  Resualt = OperateProvider.Calculation(OneNumber ,TwoNumber ,Operate);

       

 CalculateProvider calcalte = OperateFactory.CreateOperate(Operate);
            calcalte.NumberA = OneNumber;
            calcalte.NumberB = TwoNumber;
            Resualt = calcalte.GetResualt();



/// <summary>
    /// 计算基类
    /// </summary>
    public class CalculateProvider
    {
        private decimal _numberA = 0;
        private decimal _numberB = 0;
        public decimal NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }
        public decimal NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }
        /// <summary>
        /// 虚方法 实现类
        /// </summary>
        /// <returns></returns>
        public virtual decimal GetResualt()
        {
            decimal resualt = 0;
            return resualt;
        }
    }


/// <summary>
    /// 简单工厂模式 工厂如何实例化出合适的对象
    /// </summary>
    public class OperateFactory
    {
        public static CalculateProvider CreateOperate(string Operate)
        {
            CalculateProvider calcuate = null;
            switch (Operate)
            {
                case "+":
                    calcuate = new AddProvider();
                    break;
                case "-":
                    calcuate = new SubtractProcider();
                    break;
            }
            return calcuate;
        }
    }

 

第三版计算器 面向对象继承 简单工厂模式

 CalculateProvider calcalte = OperateFactory.CreateOperate(Operate);
            calcalte.NumberA = OneNumber;
            calcalte.NumberB = TwoNumber;
            Resualt = calcalte.GetResualt();


/// <summary>
    /// 简单工厂模式 工厂如何实例化出合适的对象
    /// </summary>
    public class OperateFactory
    {
        public static CalculateProvider CreateOperate(string Operate)
        {
            CalculateProvider calcuate = null;
            switch (Operate)
            {
                case "+":
                    calcuate = new AddProvider();
                    break;
                case "-":
                    calcuate = new SubtractProcider();
                    break;
            }
            return calcuate;
        }
    }



/// <summary>
    /// 计算基类
    /// </summary>
    public class CalculateProvider
    {
        private decimal _numberA = 0;
        private decimal _numberB = 0;
        public decimal NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }
        public decimal NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }
        /// <summary>
        /// 虚方法 实现类
        /// </summary>
        /// <returns></returns>
        public virtual decimal GetResualt()
        {
            decimal resualt = 0;
            return resualt;
        }
    }

 

posted @ 2016-04-05 23:20  小菜鸟飞飞  阅读(225)  评论(0编辑  收藏  举报