资讯专栏INFORMATION COLUMN

JS 设计模式 十四(策略模式)

sutaking / 371人阅读

摘要:策略模式定义一系列的算法把它们一个个封装起来并且使它们可相互替换。策略模式要素策略接口,用来约束一系列具体的策略算法。策略模式策略购买辆总金额策略购买辆总金额策略模式优点算法可以自由切换。策略模式缺点策略类会增多。所有策略类都需要对外暴露。

策略模式

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
策略模式是把一个类中经常改变或者将来可能改变的部分提取出来作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。

策略模式要素

1.Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略,实现定义的策略。
2.ConcreteStrategy:具体的策略实现,也就是具体的算法实现。
3.Context:上下文,负责与具体的策略交互,通常上下文会持有一个真正的策略实现。

实例

现在车的价格可能根据市场需求变动随时调整,对于不同销售商订购辆数进行优惠。

// 策略模式

var DP = require("./DesignPattern.js");
function Strategy() {
  DP.Interface(this, ["calPrice"]);
}

function Nodiscount() {
  this.__proto__ = new Strategy();
  this.calPrice = function (price, num) {
    return price * num;
  }
}

function Disount1() {
  this.__proto__ = new Strategy();
  this.calPrice = function (price, num) {
    return price * num * 0.95;
  }
}

function Context(strategy) {
  var _strategy=strategy;
  this.calPrice = function (price, num) {
    return _strategy.calPrice(price, num)
  }
}

var nodiscount = new Nodiscount();
var disount1 = new Disount1();

var nodiscountContext = new Context(nodiscount);
console.log("Nodiscount策略购买3辆总金额: " + nodiscountContext.calPrice(10000,3));
var disount1Context = new Context(disount1);
console.log("disount1策略购买3辆总金额: " + disount1Context.calPrice(10000,3));
策略模式优点:

1.算法可以自由切换。
2.避免使用多重条件判断。
3.扩展性良好。

策略模式缺点:
1.策略类会增多。
2.所有策略类都需要对外暴露。

适用场景:
1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2.一个系统需要动态地在几种算法中选择一种。
3.一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79541.html

相关文章

  • 忘了再看设计模式-行为型

    摘要:推文用设计模式解构三国是一种什么体验行为型设计模式一策略模式工厂模式优化结构状态模式随着状态改变而改变行为。推文状态机与状态模式责任链模式多个对象依次处理请求前者指定后者。代理模式代理针对一个对象,为了增加控制等中介双方都是多个,为了解耦。 策略模式 选择使用封装好的一系列算法,可相互替换。 类比:商店[Context]买完衣服买单[Stratege](现金[Concrete Stra...

    ShevaKuilin 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 2021云计算十大关键词:云原生、高性能、混沌工程、混合云、边缘计算、零信任、优化治理、数字政府、低

    摘要:云计算十大关键词分别是云原生高性能混沌工程混合云边缘计算零信任优化治理数字政府低碳云企业数字化转型。当前,云原生与云安全呈加速融合趋势。 7月27日,由中国信息通信研究院、中国通信标准化协会主办的2021年可信云大会在京召开。中国信息通信研究院云计算与大数据研究所所长何宝宏在会上正式发布2021云计算十大关键词以及对应的重要发展趋势。   ...

    CastlePeaK 评论0 收藏0
  • 设计模式(二十四)解释器模式

    摘要:解决方案解释器模式来解决用来解决上述问题的一个合理的解决方案,就是使用解释器模式。使用解释器模式重写示例通过上面的讲述可以看出,要使用解释器模式,一个重要的前提就是要定义一套语法规则,也称为文法。#1 场景问题# ##1.1 读取配置文件## 考虑这样一个实际的应用,维护系统自定义的配置文件。 几乎每个实际的应用系统都有与应用自身相关的配置文件,这个配置文件是由开发人员根据需要自定义的,系统...

    番茄西红柿 评论0 收藏0
  • 设计模式(二十四)解释器模式

    摘要:解决方案解释器模式来解决用来解决上述问题的一个合理的解决方案,就是使用解释器模式。使用解释器模式重写示例通过上面的讲述可以看出,要使用解释器模式,一个重要的前提就是要定义一套语法规则,也称为文法。#1 场景问题# ##1.1 读取配置文件## 考虑这样一个实际的应用,维护系统自定义的配置文件。 几乎每个实际的应用系统都有与应用自身相关的配置文件,这个配置文件是由开发人员根据需要自定义的,系统...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<