• 大话设计模式读书笔记1——简单工厂模式


    最近几日,重温了一下《大话设计模式》这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!!

    好东西就要记下来!!!

    第一章笔记:从一个简单的计算器程序来看简单工厂模式。

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

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

    界面显示:

    -=源码下载=-

  • 相关阅读:
    FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install_db:
    redis分布式锁原理与实现
    java中如何将 string 转化成 long
    FastJson中JSONObject用法及常用方法总结
    Spring IOC 一——容器装配Bean的简单使用
    静态代理和动态代理
    Spring AOP——Spring 中面向切面编程
    什么是分布式锁?实现分布式锁的三种方式
    @Consumes @Produces的作用
    pro、pre、test、dev环境
  • 原文地址:https://www.cnblogs.com/lxblog/p/3915162.html
Copyright © 2020-2023  润新知