zoukankan      html  css  js  c++  java
  • 大话设计模式-——简答工厂模式

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

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

    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();
            }
        }

  • 相关阅读:
    PAT顶级 1002. Business (35)
    Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    主席树模板poj 2104
    Java 集合相关
    扁平疣病治疗
    一些网址
    在ubuntu14.04设置静态ip
    在Ubuntu14.04下安装vsftp服务器
    移植SDL运行库到Tiny6410 上
  • 原文地址:https://www.cnblogs.com/diaozhaojian/p/5888625.html
Copyright © 2011-2022 走看看