zoukankan      html  css  js  c++  java
  • 学习笔记:体会简单工厂模式的美妙之计算器的实现

    笔记来源于《戏说面向对象设计》。

    在群里下载的资料,看过几次关于设计模式的资料,第一次理解得比较深刻得。好好学习~

    简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口
    先来看看它的组成:
    1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。
    2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
    3) 具体产品角色:工厂类所创建的对象就是此角色的实例。

    直接贴代码。

      1 /// <summary>
      2     /// 运算类
      3     /// </summary>
      4     public class Operation
      5     {
      6         private double _number1 = 0;
      7         private double _number2 = 0;
      8         /// <summary>
      9         /// 第1个数字
     10         /// </summary>
     11         public double Number1
     12         {
     13             get
     14             {
     15                 return this._number1;
     16             }
     17 
     18             set { this._number1 = value; }
     19         }
     20         /// <summary>
     21         /// 第2个数字
     22         /// </summary>
     23         public double Number2
     24         {
     25             get { return this._number2; }
     26             set { this._number2 = value; }
     27         }
     28         /// <summary>
     29         /// 得到运算结果
     30         /// </summary>
     31         /// <returns></returns>
     32         public virtual double GetResult()
     33         {
     34             double result = 0;
     35             return result;
     36         }
     37     }
     38     /// <summary>
     39     /// 加法类
     40     /// </summary>
     41     class OperationAdd : Operation
     42     {
     43         public override double GetResult()
     44         {
     45             double result = 0;
     46             result = Number1 + Number2;
     47             return result;
     48         }
     49     }
     50     /// <summary>
     51     /// 减法类
     52     /// </summary>
     53     class OperationSub : Operation
     54     {
     55         public override double GetResult()
     56         {
     57             double result = 0;
     58             result = Number1 - Number2;
     59             return result;
     60             //return base.GetResult();
     61         }
     62     }
     63     /// <summary>
     64     /// 乖法类
     65     /// </summary>
     66     class OperationMul : Operation
     67     {
     68         public override double GetResult()
     69         {
     70             double result = 0;
     71             result = Number1 * Number2;
     72             return result;
     73             //return base.GetResult();
     74         }
     75     }
     76     /// <summary>
     77     /// 除法类
     78     /// </summary>
     79     class OperationDiv : Operation
     80     {
     81         public override double GetResult()
     82         {
     83             double result = 0;
     84             if (Number2 == 0)
     85             {
     86                 throw new Exception("除数不能为0");
     87             }
     88             result = Number1 / Number2;
     89             return result;
     90             //return base.GetResult();
     91         }
     92     }
     93     /// <summary>
     94     /// 运算工厂类
     95     /// </summary>
     96     class OperationFactory
     97     {
     98         public static Operation CreateOperation(string operate)
     99         {
    100             Operation operation = null;
    101             switch (operate)
    102             {
    103                 case "+":
    104                     operation = new OperationAdd();
    105                     break;
    106                 case "-":
    107                     operation = new OperationSub();
    108                     break;
    109                 case "*":
    110                     operation = new OperationMul();
    111                     break;
    112                 case "/":
    113                     operation = new OperationDiv();
    114                     break;
    115             }
    116             return operation;
    117         }
    118     }
    View Code

    客户端实现代码:

    1 Operation oper;
    2 oper = OperationFactory.createOperate("+");
    3 oper.NumberA = 1;
    4 oper.NumberB = 2;
    5 double result = oper.GetResult();
    View Code

     另外,原文中的“编程是一门技术,更加是一门艺术”说得不错!

  • 相关阅读:
    LayoutInflater作用及使用--自定义EditText,自带清除内容按钮
    SSL backend error when using OpenSSL pycurl install error
    pypyodbc 的坑
    mongo aggregate 删除重复数据
    如何验证代理ip的正确性
    python的非官方的一个下载lib的地方
    rabbitmq web 管理系统的信息
    内存泄漏分析
    readme 语法
    logging dictconfig
  • 原文地址:https://www.cnblogs.com/-------perfect/p/3473067.html
Copyright © 2011-2022 走看看