资讯专栏INFORMATION COLUMN

每天一个设计模式·策略模式

gxyz / 1039人阅读

摘要:策略模式原文地址更多设计模式系列教程更多免费教程项目地址作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。

策略模式原文地址

更多《设计模式系列教程》

更多免费教程

0. 项目地址
作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript靠这吃饭)和python纯粹喜欢)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)

本节课代码

《每天一个设计模式》地址

1. 什么是策略模式?
策略模式定义:就是能够把一系列“可互换的”算法封装起来,并根据用户需求来选择其中一种。

策略模式实现的核心就是:将算法的使用和算法的实现分离。算法的实现交给策略类。算法的使用交给环境类,环境类会根据不同的情况选择合适的算法。

2. 策略模式优缺点

在使用策略模式的时候,需要了解所有的“策略”(strategy)之间的异同点,才能选择合适的“策略”进行调用。

3. 代码实现 3.1 python3实现
class Stragegy():
  # 子类必须实现 interface 方法
  def interface(self):
    raise NotImplementedError()

# 策略A
class StragegyA():
  def interface(self):
    print("This is stragegy A")

# 策略B
class StragegyB():
  def interface(self):
    print("This is stragegy B")

# 环境类:根据用户传来的不同的策略进行实例化,并调用相关算法
class Context():
  def __init__(self, stragegy):
    self.__stragegy = stragegy()
  
  # 更新策略
  def update_stragegy(self, stragegy):
    self.__stragegy = stragegy()
  
  # 调用算法
  def interface(self):
    return self.__stragegy.interface()


if __name__ == "__main__":
  # 使用策略A的算法
  cxt = Context( StragegyA )
  cxt.interface()

  # 使用策略B的算法
  cxt.update_stragegy( StragegyB )
  cxt.interface()
3.2 javascript实现
// 策略类
const strategies = {
  A() {
    console.log("This is stragegy A");
  },
  B() {
    console.log("This is stragegy B");
  }
};

// 环境类
const context = name => {
  return strategies[name]();
};

// 调用策略A
context("A");
// 调用策略B
context("B");
4. 参考

策略模式-Python四种实现方式

Python设计模式 - 策略模式

《JavaScript设计模式和开发实践》

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

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

相关文章

  • 每天一个设计模式·策略模式

    摘要:策略模式原文地址更多设计模式系列教程更多免费教程项目地址作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。 策略模式原文地址 更多《设计模式系列教程》 更多免费教程 0. 项目地址 作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(靠这吃饭)和python(纯粹喜欢)两种语言实现。诚然,每种设计模式都有多种...

    EsgynChina 评论0 收藏0
  • 私有云解决方案-UCloudStack私有云解决方案(弹性伸缩)

    摘要:弹性伸缩是指在业务需求增长时自动增加计算资源虚拟机以保证计算能力,在业务需求下降时自动减少计算资源以节省成本同时可结合负载均衡及健康检查机制,满足请求量波动和业务量稳定的场景。弹性伸缩(Auto Scaling)是指在业务需求增长时自动增加计算资源(虚拟机)以保证计算能力,在业务需求下降时自动减少计算资源以节省成本;同时可结合负载均衡及健康检查机制,满足请求量波动和业务量稳定的场景。用户可通...

    ernest.wang 评论0 收藏0
  • 为减少用户电话排队,阿里研发了智能客服调度系统

    摘要:明确了客服调度的核心问题,也知道了难点,更看到了目前的现状后,我们决定打造一款自动智能的客服调度系统。对于社会化的云客服,我们可以做到,比如排队数超过某值时,自动触发云客服的应急放班。 背景 为什么客服需要调度?阿里集团客户体验事业群(CCO)目前承接了阿里集团以及生态体的客户服务业务,我们的客户通过各个渠道来寻求解决各类问题,每天的进线量巨大,而且经常伴随着突发性进线,比如天猫代金券...

    tinysun1234 评论0 收藏0
  • 为减少用户电话排队,阿里研发了智能客服调度系统

    摘要:今天,我们邀请阿里高级技术专家力君,为大家分享自动智能的客服调度系统。明确了客服调度的核心问题,也知道了难点,更看到了目前的现状后,我们决定打造一款自动智能的客服调度系统。 小叽导读:提到调度,大家脑海中可能想起的是调度阿里云的海量机器资源,而对于阿里集团客户体验事业群(CCO)而言,我们要调度的不是机器,而是客服资源。今天,我们邀请阿里高级技术专家力君,为大家分享自动、智能的客服调度...

    eechen 评论0 收藏0

发表评论

0条评论

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