博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每天一个设计模式·策略模式
阅读量:5880 次
发布时间:2019-06-19

本文共 1310 字,大约阅读时间需要 4 分钟。

0. 项目地址

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

1. 什么是策略模式?

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

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

2. 策略模式优缺点

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

3. 代码实现

3.1 python3实现

class Stragegy():  # 子类必须实现 interface 方法  def interface(self):    raise NotImplementedError()# 策略Aclass StragegyA():  def interface(self):    print("This is stragegy A")# 策略Bclass 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]();};// 调用策略Acontext("A");// 调用策略Bcontext("B");

4. 参考

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

转载于:https://www.cnblogs.com/geyouneihan/p/10009304.html

你可能感兴趣的文章
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
那些年追过的......写过的技术博客
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>
学员会诊之03:你那惨不忍睹的三层架构
查看>>