• 大话设计模式-——简答工厂模式


    从一个简单的计算器程序来看简单工厂模式。

    变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂。

    UML图:

    /// <summary>
        /// 运算类
        /// </summary>
        public class Operation
        {
            public double Number1 { get; set; }
    
            public double Number2 { get; set; }
    
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
    /// <summary>
        /// 加法类
        /// </summary>
        public class OprerationAdd : Operation
        {
            public override double GetResult()
            {
                double reslut = 0;
                reslut = Number1 + Number2;
                return reslut;
            }
        }
    
        /// <summary>
        /// 减法类
        /// </summary>
        public class OprerationSub : Operation
        {
            public override double GetResult()
            {
                double reslut = 0;
                reslut = Number1 - Number2;
                return reslut;
            }
        }
    
        /// <summary>
        /// 乘法类
        /// </summary>
        public class OprerationMul : Operation
        {
            public override double GetResult()
            {
                double reslut = 0;
                reslut = Number1 * Number2;
                return reslut;
            }
        }
    
        /// <summary>
        /// 除法类
        /// </summary>
        public class OprerationDiv : Operation
        {
            public override double GetResult()
            {
                double reslut = 0;
                if (Number2==0)
                {
                    throw new Exception("除数不能等于0");
                }
                reslut = Number1 / Number2;
                return reslut;
            }
        }

    运算工厂类:

    public class OperationFactory
        {
            public static Operation CreateOperate(string oper)
            {
                Operation operation = null;
                switch (oper)
                {
                    case "+":
                        operation = new OprerationAdd();
                        break;
                    case "-":
                        operation = new OprerationSub();
                        break;
                    case "*":
                        operation = new OprerationMul();
                        break;
                    case "/":
                        operation = new OprerationDiv();
                        break;
                }
                return operation;
            }
        }

    客户端代码:

    public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
                this.cbxOper.SelectedIndex = 0;         
            }     
            
            /// <summary>
            /// 运算点击
            /// </summary> 
            private void btnCompute_Click(object sender, EventArgs e)
            {
                double num1 = 0;
                double num2 = 0;
                if (!double.TryParse(this.txtNum1.Text,out num1))
                {
                    this.lblInfo.Text = "请输入正确的数字";
                    this.txtNum1.Focus();
                    return;
                }
    
                if (!double.TryParse(this.txtNum2.Text, out num2))
                {
                    this.lblInfo.Text = "请输入正确的数字";
                    this.txtNum2.Focus();
                    return;
                }
    
                Operation operation = null;
                operation = OperationFactory.CreateOperate(this.cbxOper.Text);
                operation.Number1 = num1;
                operation.Number2 = num2;
                double ret = operation.GetResult();
                this.txtResult.Text = ret.ToString();
            }
        }

  • 相关阅读:
    C/C++ Qt 选择夹TabWidget组件应用
    C/C++ Qt TreeWidget 单层树形组件应用
    C/C++ Qt TreeWidget 嵌套节点操作技巧
    C/C++ Qt ToolBar 菜单栏组件应用
    C/C++ Qt 标准Dialog对话框组件应用
    C/C++ Qt ListWidget 列表框组件应用
    C/C++ Qt QChart 绘图组件应用
    C/C++ Qt 自定义Dialog对话框组件应用
    基于地图开发控件GMap.Net 使用 (六) 中文显示详细街道数据信息
    OpenXml 域变量更新
  • 原文地址:https://www.cnblogs.com/diaozhaojian/p/5888625.html
Copyright © 2020-2023  润新知