大话设计模式读书笔记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();
        }
    }

界面显示:

-=源码下载=-

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

时间: 2024-10-13 19:47:16

大话设计模式读书笔记1——简单工厂模式的相关文章

大话设计模式读书笔记--1.简单工厂模式

定义 专门定义一个类来负责创建其他类的实例, 被创建的类通常具有共同的父类. 它又称为静态工厂模式,属于类的创建型模式 模式类图 将对象的创建和对象本身业务处理分离了,可以降低系统的耦合 工厂模式实现 场景:实现一个计算器, 输入a和b, 计算a+b和a-b 下载代码,解压后目录如下图: 优缺点 当增加一个乘法运算时,需要添加乘法类和修改工厂类创建对象的逻辑,它违反了开闭原则 优点:提供专门的工程类创建对象, 降低系统的耦合 缺点: 添加新产品时,需要修改工厂类, 系统扩展困难 使用场景 1.客

大话设计模式第八章之简单工厂模式

简单工厂模式 工厂方法模式 package com.dp.factory; interface IFactory { Calculator CreateCalculator(); } class AddFactory implements IFactory { @Override public Calculator CreateCalculator() { return new CalculatorAdd(); } } class SubFactory implements IFactory {

大话设计模式第一章之简单工厂模式

package com.dp.simpleFactory; //计算器作为抽象类 定义一个计算需要什么 子类继承了两个数字 并且要有自己的计算实现方法 public abstract class Calculator { protected double numberA=0; protected double numberB=0; public double getNumberA() { return numberA; } public void setNumberA(double number

大话设计模式读书笔记4——模版方法模式

模板方法是一种常见的设计模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. UML图: 具体实现代码: namespace TemplateMethod { class Program { static void Main(string[] args) { AbstractClass A = new ConcreteClassA(); A.TemplateMethod(); AbstractClass B = new

大话设计模式读书笔记--19.责任链模式

定义 责任链模式定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 比如: 员工小张向组长申请加薪, 组长没这个权利并将请求告诉部长,部长同意了小张的加薪请求 模式结构 代码实现 场景: 经理可以批准请假, 经理的上级是总监, 总监可以批准加薪 代码实现:点击下载 优点 1.客户端不知道哪一个对象最终处理请求,在不影响客户端的情况下可以动态的重新组织和分配责任 2.链中的对象并不知道链的结构,只需保持

大话设计模式——第一章:简单工厂模式

#include<iostream> #include<string> #include<exception>//c++标准异常类型的库 using namespace std; bad_exception somethingwrong; //在c++中class默认的继承是private 而struct 默认的继承是public //static 类静态成员函数,即与对象无关,在类中的值不是因实例化某个对象而改变. class operation//运算类(基类) {

大话设计模式第一章---计算器简单工厂模式PHP实现

1 <?php 2 abstract class Operation { 3 private $_numberA = 0; 4 private $_numberB = 0; 5 6 public function __get($number) { 7 if (isset($this->$number)) { 8 return $this->$number; 9 } else { 10 echo "the two number name is '_numberA' and '_n

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

易学设计模式看书笔记(2) - 简单工厂模式

本文摘自易学设计模式一书 一.简单工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public class D