大话设计模式-简单工程模式
前言:
简单工厂模式是这23个模式里的第一个模式,也是比较简单和体现非常明确的一个模式。通过简单工厂可以非常好的体验出面向对象编程的好处,面向对象概念的重要性。也算是通过这个模式体验设计模式的好处把!
目录
概念:
根据客户端的选择进行动态的实例化对象,也就是根据用户的需求来实例化具体的对象。
需求:
实现一个有加减乘除的计算器,利用简单工厂模式实现。
实现:
业务逻辑:
运算基类:
 /// <summary>
    /// 计算类
    /// </summary>
    public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;
        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }//end NumberA
        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }//end NumberB
        //计算方法--虚方法
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }//end Pperaton
    运算具体的派生类:
/// <summary>
    /// 加法运算,继承运算类。
    /// </summary>
    class OpertionAdd : Operation
    {
        //重新父类的计算方法
        public override double GetResult()
        {
            double result = 0;//计算结果
            result = NumberA + NumberB;//具体运算
            return result;//返回结果
        }//end Getresult
    }//end OpertonAdd
    /// <summary>
    /// 减法
    /// </summary>
    class OpertiononSub : Operation
    {
        //重新父类的计算方法
        public override double GetResult()
        {
            double result = 0;//计算结果
            result = NumberA - NumberB;//具体运算
            return result;//返回结果
        }//end Getresult
    }//end OPertionsub
    /// <summary>
    /// 乘法
    /// </summary>
    class OpertionMul : Operation
    {
        //重新父类的计算方法
        public override double GetResult()
        {
            double result = 0;//计算结果
            result = NumberA * NumberB;//具体运算
            return result;//返回结果
        }//end Getresult
    }//end OpertionMul
    /// <summary>
    /// 除法
    /// </summary>
    class OpertionDiv : Operation
    {
        //重新父类的计算方法
        public override double GetResult()
        {
            double result = 0;//计算结果
            if (NumberB == 0)
                throw new Exception("除数不能为0.");
            result = NumberA / NumberB;//具体运算
            return result;//返回结果
        }//end Getresult
    }
    //end OpertionDiv运算工厂:
/// <summary>
    /// 简单工厂类,根据需求实例化类。
    /// </summary>
    public class OperationFactory
    {
        /// <summary>
        /// 实例化具体的运算类
        /// </summary>
        /// <param name="operate">运算符</param>
        /// <returns>返回具体实例化的类</returns>
        public static Operation createOperate(string operate)
        {
            Operation oper = null;//实例化父类,从新赋值。
            //判断
            switch (operate)
            {
                case "+":
                    //把父类,转换成子类
                    oper = new OpertionAdd();//实例化加法类
                    break;
                case "-":
                    //把父类,转换成子类
                    oper = new OpertiononSub();//实例化减法类
                    break;
                case "*":
                    //把父类,转换成子类
                    oper = new OpertionMul();//实例化乘法类
                    break;
                case "/":
                    //把父类,转换成子类
                    oper = new OpertionDiv();//实例化除法类
                    break;
            }//end swithc
            //返回结果
            return oper;
        }
    }//end OperationFactory客户端:
//确定按钮
private void button1_Click(object sender, EventArgs e)
        {   //运算类
            Operation ope;
            //从新给父类,赋值。
         
            ope = OperationFactory.createOperate(txt2.Text);   //运算符
            ope.NumberA = int.Parse(txt1.Text);//给A赋值
            ope.NumberB =int.Parse( txt3.Text);//给B赋值
            //调用计算方法,输出结果。
            double result = ope.GetResult();
            txt4.Text = result.ToString();
        }
结果:

    欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号