请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Python笔记:命令模式

[复制链接]
查看: 52|回复: 0

1万

主题

2万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
48017
发表于 2019-12-4 02:11 | 显示全部楼层 |阅读模式
命令形式,正如形式的名字一样,该形式中的不同操纵都可以当做差此外命令来实行,可以操纵行列来实行一系列的命令,也可以零丁实行某个命令。该形式重点是将差此外操纵封装为差此外命令工具,将操纵的挪用者与实行者举行解耦。
命令形式中的Command工具(即每一个命令,大要说命令工具)用于封装在完成某项操纵或触发一个变乱时所需的全数信息,包含需要完成此操纵的工具、该工具的方式以及该方式所需的参数,即Command工具中会封装好某项操纵所需的全数信息,操纵时只需要挪用对应的execute方式即可,即表示“这条命令”的实行。凡是我们会操纵到不单一个命令,是以大要会建立多个Command工具,代表多个不同操纵的命令。
命令形式三个脚色:

  • Command:命令工具,对特定的操纵举行封装,用于建立差此外命令。
  • Receiver:参数担任者,即具体操纵的实行者。
  • Invoker:挪用命令的工具,由此工具来挪用差此外命令工具(即命令行列的建立者)。
命令形式焦点脑筋:

  • 将请求封装为工具(即封装为Command命令工具)。
  • 可用差此外请求对客户举行参数化(按照差此外操纵举行不同命令的参数传值)。
  • 答应将请求保存在行列中。
  • 供给面向工具的回调。
命令形式优点:

  • 将操纵的挪用者和实行者解耦,操纵Command工具来作为中心的代理者。
  • 可以操纵行列,以便建立和治理一系列的命令。
  • 增加新的命令加倍轻易,且无需变动现有的代码。
  • 可以操纵命令形式实现重做或回滚操纵,以及异步使命实行,只需要实行对应的命令即可。
命令形式弱点:

  • 命令形式大要需要建立很多的类和工具来举行相互的合作,所以增加了实现和保护的复杂度。
  • 由于每一个命令都是一个Command类,所以假以命令过量,那实现和保护起来就加倍的麻烦。
简单示例:
  1. from abc import ABCMeta, abstractmethodclass Receiver:    """Receiver:界说各类方式以便实行差此外操纵"""    def action1(self):        print('Execute action1...')    def action2(self):        print('Execute action2...')class Command(metaclass=ABCMeta):    """命令工具接口:界说同一的命令实行方式"""    @abstractmethod    def execute(self):        passclass Action1(Command):    """命令1:用于实行操纵action1"""    def __init__(self, receiver):        self.receiver = receiver    def execute(self):        self.receiver.action1()class Action2(Command):    """命令2:用于实行操纵action2"""    def __init__(self, receiver):        self.receiver = receiver    def execute(self):        self.receiver.action2()class Invoker:    """建立命令行列,挪用并实行行列中的命令"""    def __init__(self):        self.actions = []    def append_action(self, action):        self.actions.append(action)    def execute_actions(self):        for action in self.actions:            action.execute()if __name__ == '__main__':    receiver = Receiver()    action1 = Action1(receiver)    action2 = Action2(receiver)    invoker = Invoker()    invoker.append_action(action1)    invoker.append_action(action2)    invoker.execute_actions()
复制代码


免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表