zoukankan      html  css  js  c++  java
  • 设计模式—策略模式

    定义

      提起if else,我们肯定很熟悉,但当我们大量使用if else时,是否会想到这其中会产生的问题?

      当大量代码放进if else里时,我们的整个代码片段将会非常大。符合了if的某个条件时,某段代码才会被调用,其它代码此时就成了无用代码,造成了空间浪费,且不易维护。

      此时策略模式就可以发挥它的作用了!

      策略模式就是对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。

      这里的不同的场景对应if else 里面的各种条件,不同的实现算法对应if else里面的具体实现算法。

    如何使用策略模式

      让我们看一段if else代码:

      

      很典型的一段代码,实现了根据不同的地区采用不同的计税算法。如果需求变更,要多加一个国家的计税算法,怎么办呢?

      很自然的,我们会在枚举那多加一个变量,然后再CalculateTax()中加一段else if。

      但是,如果我们这么改就会违背了开发封闭设计原则,我们应该进行拓展,而不是修改源代码!

      使用了策略模式后:

      

      

      我们先建一个抽象类:TaxStrategy,里面有一个虚函数Caculate(...),这个函数在子类中实现。

      然后我们把各国的计税算法都写成这个抽象类的子类。

      最后计税的时候,根据需要,调用对应的计税算法。

      当我们需要新增某个国家的计税算法时,只需添加一个TaxStrategy的子类,且把算法写进去即可,源代码不需要修改,对代码进行扩展,遵从了开发封闭原则。

  • 相关阅读:
    MongoDB(01):Windows 平台安装 MongoDB
    MongoDB(99):NoSQL Manager for MongoDB 教程(进阶篇)
    MongoDB(99):NoSQL Manager for MongoDB 教程(基础篇)
    echarts(10):旭日图
    echarts(09):ECharts 事件处理
    echarts(08):数据的视觉映射
    echarts(07):响应式
    echarts(06):数据集(dataset)
    echarts(05):数据集(dataset)
    echarts(04):异步加载数据
  • 原文地址:https://www.cnblogs.com/mcomco/p/10755571.html
Copyright © 2011-2022 走看看