zoukankan      html  css  js  c++  java
  • 简单工厂设计模式

    前言

      1>、我们可以一个类就能写完这个计算器的程序,但是这样:

        第一,不利于维护,要改动就要改动整个程序;第二,不可复,只能这个需要使用;第三,不利于扩展

        所以,通过封装,继承,多态去降低耦合度。

           2>、首先就是业务的封装,将业务逻辑和界面层分离,只有分离,才可以达到容易维护或扩展。

    一、操作类

      

     1     public class Operation
     2     {
     3         public double _numberA = 0;
     4         public double _numberB = 0;
     5         public double NumberA
     6         {
     7             get { return _numberA; }
     8             set { _numberA = value; }
     9         }
    10         public double NumberB
    11         {
    12             get { return _numberB; }
    13             set { _numberB = value; }
    14         }
    15         public virtual double GetResult()
    16         {
    17             return 0;
    18         }
    19     }

    二、具体操作类

      1>、首先有一个运算类,它有两个属性,主要用于计算器的前后数,然后有一个虚方法GetResult(),用于得到结果。

      2>、然后把加减乘除的运算写成子类,继承它之后,重写GetResult();这样要修改任何算法就不需要提供其他算了,

        要添加算法,只需要添加算法类继承父类。

    1     public class OperationAdd : Operation
    2     {
    3         public override double GetResult()
    4         {
    5             return NumberA + NumberB;
    6         }
    7     }
    1  public class OperationSub : Operation
    2     {
    3         public override double GetResult()
    4         {
    5             return NumberA - NumberB;
    6         }
    7     }

    三、工厂类

      1>、用简单工厂 让计算器知道我们希望用哪一个算法  

     1   public class OperationFactory
     2     {
     3         public static Operation CreateOperate(string type)
     4         {
     5             Operation oper = null;
     6             switch (type)
     7             {
     8                 case "+":
     9                     oper = new OperationAdd();
    10                     break;
    11                 case "-":
    12                     oper = new OperationSub();
    13                     break;
    14                 default:
    15                     break;
    16             }
    17             return oper;
    18         }
    19     }

    四、测试

      

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Operation op;
     6             op = OperationFactory.CreateOperate("+");
     7             op.NumberA = 1;
     8             op.NumberB = 2;
     9             Console.WriteLine(op.GetResult());
    10             Console.WriteLine("__________________");
    11             op = OperationFactory.CreateOperate("-");
    12             op.NumberA = 5;
    13             op.NumberB = 3;
    14             Console.WriteLine(op.GetResult());
    15             Console.ReadKey();
    16         }
    17     }

         

      

    总结

      1>、不管是控制台程序,windows程序,web程序或者app,都可以用这段段代码来实现计算器的功能

      2>、如果有一天我们需要更改加法运算,我们只需要改OperationAdd

      3>、如果我们要添加运算,比如平方根,对数等;只需要增加相应的运算子类

      4>、还要再switch中增加分支

      参考书籍:大话设计模式

      

  • 相关阅读:
    阿里云证书nginx无法访问带点的路径
    升级阿里云服务器文案
    html模板结合JS替换函数,生成新的记录
    企业使命、原景、战略、战略目标 详解
    Android之Handler用法总结【转】
    android activity的常用代码:关闭、传值、返回值、回调、网页、地图、短信、电话
    PHP十进制转36进制的函数
    [转]仓库管理必须知道的的50条重要知识
    [转]关于项目管理、软件开发的一些思考
    PHP5.5安装PHPRedis扩展
  • 原文地址:https://www.cnblogs.com/hyunbar/p/9805938.html
Copyright © 2011-2022 走看看