策略模式,让一个类的行为或其算法可以在运行时更改,策略是让实例化对象动态的更改自身的某些方法使用的是types.MethodType绑定。

说起策略的动态更改方法,就不得不对比一下元类的动态增加方法,元类是类的抽象,它负责一个抽象类创建、实例化,是通过type函数来绑定方法。

假设这样的一个应用场景:一个人旅游,在不同的国家说不通的语言。

示例code:

import types

class People:

def __init__(self, func=None):if func:self.speak = types.MethodType(func, self)

def speak(self):print("说中文")

def speak_english(self):print('说英语')

def speak_german(self):print('说德语')

if __name__ == '__main__':test1 = People()test2 = People(speak_english)test3 = People(speak_german)[func.speak() for func in [test1, test2, test3]]

说中文
说英语
说德语

使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

python设计模式(二十二):策略模式相关推荐

  1. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  2. 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)

    源地址:http://doc.chinaunix.net/python/200703/202210.shtml 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式 ...

  3. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  4. 云计算设计模式(十二)——索引表模式

    云计算设计模式(十二)--索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主 ...

  5. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  6. 设计模式(十二)—— 享元模式

    设计模式(十二)-- 享元模式 定义 结构 案例实现 优缺点和使用场景 JDK源码解析 定义 运用共享技术来有效地支持大量细粒度对象的复用.它通过共享已经存在的对象来大幅度减少需要创建的对象数量.避免 ...

  7. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...

  8. (原创)无废话C#设计模式之十二:Bridge

    无废话C#设计模式之十二:Bridge 意图 将抽象部分与实现部分分离,使它们都可以独立的变化. 场景 还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决.现在的问题就是, ...

  9. (二十二)访问者模式详解(伪动态双分派) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本次LZ和各位分享一下访问者模式,从场景.设计初衷以及实现方面来说,访问者模式算是LZ即将写到的24种设计模式当中,最复杂也是最难理解 ...

  10. (原创)无废话C#设计模式之二十二:总结(针对GOF23)

    无废话C#设计模式之二十二:总结(针对GOF23) 比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 ...

最新文章

  1. Android线程管理(一)
  2. Mysql学习进度(2013.03.12)—sql语句学习一
  3. fluentftp 积极拒绝_【新时代文明实践】光明街道光大社区开展“光盘行动 拒绝浪费 从我做起”新时代文明实践活动...
  4. Python3 列表list合并的4种方法
  5. hdu 1042 N! 高精度运算
  6. 计算机技术级生活中的应用,人工智能技术在计算机中的发展与应用
  7. 牛客题霸 [数组中出现次数超过一半的数字] C++题解/答案
  8. Golang 实现求素数【 输入N,求N内素数个数 】
  9. 95-140-104-源码-transform-算子flatMap
  10. 若依框架如何进行单元测试
  11. Ubuntu下yolov4训练自己的数据集
  12. 数学建模(五)系泊系统设计(16年国赛A题)
  13. 【设计模式】-工厂模式->简单工厂模式(源码与类图解析)
  14. oracle写一个全量刷新,Oracle物化视图定时全量刷新以致归档日志骤增
  15. 茶道形式、用具及要素
  16. aardio - 利用bitLock快速读写图片颜色值
  17. 网页前端监控系统(错误日志,接口监控)的使用
  18. 已解决At least Windows 8.1 or Windows Server 2012 are required to install Python 3.9.4(64-bit)
  19. Java读取文件转换成byte[]的小结
  20. 仿【得物】微信小程序实战全教程(动手就会)

热门文章

  1. NGUI里的sprite和label有白色的边框
  2. javascript-复制
  3. [bzoj4813][Cqoi2017]小Q的棋盘
  4. 发布Drools Workbench到Tomcat on Linux
  5. JQuery操作总结
  6. 如何设置任务栏和开始菜单属性中的 分组相似任务栏按钮 的个数
  7. jQuery 性能优化指南(2)
  8. linux下Makefile学习--注释很好
  9. C++_类和对象_C++继承_菱形继承_或钻石继承_问题及利用虚继承解决该问题---C++语言工作笔记068
  10. 大数据之-Hadoop之HDFS_HDFS_基于JAVA的开发_客户端环境准备---大数据之hadoop工作笔记0054