python实时策略_Python策略模式
标签: python 设计模式 策略模式
引子
接着开始吧,还是读了HF之后的学习笔记。
有些时候继承并不是适当的解决方式,因为对象的行为在子类里面不断变化,并且让所有子类都有这些行为是不恰当的。
设计原则
找出可能需要变化的部分,把他们独立出来,不要和那些不需要变化的代码混在一起
正文
如果每次新的需求一来,都会使某方面的代码变化,那么就可以确定,这部分的代码需要抽离出来,和其他稳定的代码有所区分,把会变化的部分取出来并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
找个例子来说明这个事,设计一个游戏,游戏里面有各种各样的武器,各种各样的职业,各种各样的技能,这里需要创建一个拿着剑具有玉女心经剑法技能的国王职业的人物,该怎么去实现呢?
先取出要变化的部分,武器,技能,人物可能都会发生变化,我可能增加一个武器,修炼一项新的技能,创建一个新的职业,这些变化的部分取出来,单独实现。
接着创建一个客户类,由用户自行制定需要创建出什么样的人物
代码
分别定义武器,职业,技能的实现
武器
class SwordBehavior(object):
def __init__(self):
self.behaviorCode = "SWORD"
def __call__(self):
return "use the sword"
class KnifeBehavior(object):
def __init__(self):
self.behaviorCode = "KNIFE"
def __call__(self):
return "use the knife"
class BowAndArrowBehavior(object):
def __init__(self):
self.behaviorCode = "BOWANDARROW"
def __call__(self):
return "use the bow and arrow"
class AxeBehavior(object):
def __init__(self):
self.behaviorCode = "AXE"
def __call__(self):
return "use the axe"
职业
class KingFigure(object):
def __init__(self):
self.figureCode = "KING"
def __call__(self):
return "I am a king"
class QueenFigure(object):
def __init__(self):
self.figureCode = "QUEEN"
def __call__(self):
return "I am a queen"
class TrollFigure(object):
def __init__(self):
self.figureCode = "TROLL"
def __call__(self):
return "I am a troll"
class KnightFigure(object):
def __init__(self):
self.figureCode = "KNIGHT"
def __call__(self):
return "I am a knight"
技能
class attack1Method(object):
def __init__(self):
self.attackCode = "ATTACK1"
def __call__(self):
return "with attack1"
class attack2Method(object):
def __init__(self):
self.attackCode = "ATTACK2"
def __call__(self):
return "with attack2"
class attack3Method(object):
def __init__(self):
self.attackCode = "ATTACK3"
def __call__(self):
return "with attack3"
创建一个类来设定每个人物
class CharacterCreator(object):
def __init__(self):
self.__weaponImpls = [SwordBehavior(),
KnifeBehavior(),
BowAndArrowBehavior(),
AxeBehavior()]
self.__figureImpls = [KingFigure(),
QueenFigure(),
TrollFigure(),
KnightFigure()]
self.__attackImpls = [attack1Method(),
attack2Method(),
attack3Method]
def __call__(self, weapon, character, attack):
for wimpl in self.__weaponImpls:
if wimpl.behaviorCode == weapon:
for fimpl in self.__figureImpls:
if fimpl.figureCode == character:
for aimpl in self.__attackImpls:
if aimpl.attackCode == attack:
return fimpl() + " " +wimpl() + " " + aimpl()
之后,搞点数据测试一下
def main():
chracterCreator = CharacterCreator()
king = chracterCreator("SWORD", "KING", "ATTACK1")
queen = chracterCreator("KNIFE", "QUEEN", "ATTACK2")
print(king)
print(queen)
if __name__ == '__main__':
main()
输出的结果
I am a king use the sword with attack1
I am a queen use the knife with attack2
尾声
这就是策略模式。
python实时策略_Python策略模式相关推荐
- python实时监控_python实时监控cpu小工具
本文实例为大家分享了python实时监控cpu的工具,供大家参考,具体内容如下 虽然写的很不完善,但是当练手吧,对于实时监控cpu还是有点用处的,虽然android studio已经提供了一样的功能, ...
- python实时语音识别_Python结合百度语音识别实现实时翻译软件的实现
一.所需库安装 pip install PyAudio pip install SpeechRecognition pip install baidu-aip pip install Wave pip ...
- python实时定位_Python实现命令行监控北京实时公交之一
开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: 在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下: 红色的B说明在梅 ...
- python实时数据流_python – 使用烧瓶web-app监控实时数据流
这是基于 https://stackoverflow.com/a/13388915/819544发布的答案 我想监视一个数据流并将其推送到类似于上面答案的前端,但是一旦应用程序启动,流就开始生成/监视 ...
- python 实时录音_python实现录音功能(可随时停止录音)
本文实例为大家分享了python实现录音功能的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import pyaudio import time import t ...
- python 实时曲线_python实现“艾宾浩斯”记忆曲线表
赫尔曼·艾宾浩斯(Hermann Ebbinghaus 1850.1.24-1909.2.26)德国心理学 家. 1.复习的原则 时间间隔:20分钟 1小时 8小时 1天 2天 6天 31天 重学节省 ...
- python 实时行情_Python实现股票行情接收V010
本次版本增加如下功能: 1.增加一个新的行情源:QQ行情源:http://qt.gtimg.cn 2.修改主循环,新增一个线程来获取行情 3.增加股票跟踪功能,当跟踪股票最新价格高于止盈比例或是止损比 ...
- 用python完成选股策略_python量化选股策略_量化股市
金字塔决策交易系统 等安装结束后自己找缺少的对应的软件安装.2.软件本体开始安装3.阅读勾选软件安装协议4.选择软件安装目录5.准备开始安装6.等待以后就可以看到金字塔决策交易系统安装完成!登陆软件后 ...
- python 网格策略_Python版简单网格策略
Python版简单网格策略 策略广场上的Python策略不多,这里编写了一个Python版本的网格策略.策略原理十分简单,在一个价格区间内固定价格距离产生一系列的网格节点,当行情变化时,价格到达一个网 ...
最新文章
- [转] 理解RESTful架构
- sysbench 性能测试
- python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
- 谷歌大罢工组织者离职:自曝不得不走,“遭遇秋后算账”
- 经济学中的定量分析python_Sargent定量经济学(3):Python
- java跳过_java跳过https证书直接请求工具类
- with open新创建的文件在哪找_Python 简明教程——24,Python 文件读写
- RTC 媒体流数据包丢包问题解决
- 排序系列02--选择排序
- mysql 写不进数据库_求助,为何我的数据不能写入数据库
- 最近卡脖子的汽车芯片产业链全景图(车规级芯片)
- c++-密码生成小程序
- Tomcat乱码情况完美解决
- U盘病毒肆虐横行 金山毒霸2011全面解决隐患
- 无根树的计数——prufer序列
- 第三方包的安装及管理
- java动物继承_java 编码实现动物世界的继承关系:动物(Animal)属性:名称(name)具有行为:吃(eat)、睡觉(sleep)...
- Qt中的矩阵计算库eigen
- python数据分析基础技术篇_HTML5小游戏---爱心鱼(上)
- 加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考
热门文章
- (项目)生鲜超市(六)
- 浏览器启动__chrome浏览器
- .Net实现发送邮件功能
- jQuery 查找父元素
- Android开发——搭建最新版本的Android开发环境
- web.py+xheditor+ ajaxfileupload+新浪sae图片上传
- 在MVVM模式下,ListBox的Command绑定
- android sdk 帮助文档下载地址
- PHP学习之六:预定义常量
- pip导包CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘异常处理