Python设计模式:策略模式
设计模式十六:策略模式
什么是策略模式
鼓励使用多种算法来解决一个问题,其杀手级特性是能够在运行的时候透明地切换算法。
如果有两种算法,其中一种少量输入效果好,另一种对大量输入效果好,
则可以使用策略莫斯在运行时基于输入数据决定使用哪种算法。
使用场景
动态、透明地应用不同算法(目的相同但实现方案不同)
创建不同的样式表现,为了实现可移植性或动态地改变数据的表现
模拟:机器人行为中的所有不同之处都可以使用不同的策略来建模
典型案例
赶飞机,策略有三
1.乘坐公交或地铁,省钱
2.开车,不介意停车费
3.打车,时间紧急且没有自己的车
补充知识
选择不同排序算法的标准
1.需要排序的元素数量
2.算法的最佳/平均/最差时间复杂度
3.算法的空间复杂度
4.算法的稳定性
5.算法的代码实现复杂度
实例代码
# 实现检测在一个字符串中是否所有字符都是唯一的import time
SLOW = 3 # 3秒
LIMIT = 5 # 5个字符
WARNING = 'too bad,you picked the slow algorithm :('def pairs(seq): # 返回所有相邻字符对的一个序列n = len(seq)for i in range(n):yield seq[i],seq[(i+1)%n]def allUniqueSort(s): # 如果超过5个字符,则运行缓慢if len(s) > LIMIT:print(WARNING)time.sleep(SLOW)srtStr = sorted(s)for (c1,c2) in pairs(srtStr):if c1 == c2:return Falsereturn Truedef allUniqueSet(s): # 如果小于5个字符,则运行缓慢if len(s) < LIMIT:print(WARNING)time.sleep(SLOW)return True if len(set(s)) == len(s) else False def allUnique(s,strategy):return strategy(s)def main():while True:word = Nonewhile not word:word = input('Insert word (type quit to exit) >')if word =='quit':print('bye')return strategy_picked = Nonestrategies = {'1':allUniqueSet,'2':allUniqueSort}while strategy_picked not in strategies.keys():strategy_picked = input('Choose strategy :[1] Use a set,[2] Sort and Insert pair >')try:strategy = strategies[strategy_picked]print('allUnique({}):{}'.format(word,allUnique(word,strategy)))except KeyError as err:print('Incorrect option: {}'.format(strategy_picked))print()if __name__ == "__main__":main()
Python设计模式:策略模式相关推荐
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- Python设计模式-状态模式
Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
最新文章
- UVa 10047,独轮车
- 这回真的是挤时间了-PHP基础(三)
- PHP多选题怎么弄,php多选题评分算法求指导解决方法
- 苹果开发几个常见的错误
- 腾讯 AngelFL 联邦学习平台揭秘
- WebRTC第六步:下载webrtc
- Android颜色渐变的分隔线(ListView)
- 基于阿里云实现游戏数据运营(附Demo)
- js与flash结合使用
- 进入路由器boot的方式
- 查看文章strncpy()功能更好的文章
- 第1章 异常产生异常处理
- iPhone 开源游戏引擎
- js控制layui radio button选中
- 程序员的需要掌握的数学知识
- 在Ubuntu 20.04(含Xubuntu、Linux Mint Cinnamon等衍生版)上安装Wine QQ,获得更佳的使用体验
- html当当网上书店,当当网上书店案例代码+css+js+images
- Three.js学习笔记①---搭建本地three.js官网(来自B站老陈视频)
- 随机森林和多元线性回归R语言实现代码
- JDBC中的DBUtil工具和druid连接池相关代码实例
热门文章
- xtu DP Training C.炮兵阵地
- Tensorflow API(一)
- mysql 1064 update_MySQL更新错误#1064
- python 英文字典-python如何制作英文字典
- vscode调试时如何在launch.json中添加环境变量
- 使用Bind配置DNS Load Balancing
- VS中依赖库相对路径的配置及项目间依赖项
- 美国能限制linux内核,美国大学教授「故意」向 Linux 提交含 Bug 代码,内核管理员“封杀”明尼苏达大学...
- stosb, stosw, stosd 汇编指令
- 成都电子地图 高清15、17、19级别 谷歌电子地图资源