Python:设计模式之命令模式

举报
彭世瑜 发表于 2021/08/13 23:55:32 2021/08/13
【摘要】 命令模式 命令模式属于行为型模式 行为型模式侧重于对象的响应性,利用对象之间的交互实现更强大的功能 其中对象用于封装在完成一项操作或在触发一个事件时所需的全部信息: 1、方法名称 2、拥有方法的对象 3、方法参数的值 命令模式术语 Command: 声明执行操作的接口 ConcreteCommand:将一个Receiver对象和一个操作绑定在一起 Receiver...

命令模式

命令模式属于行为型模式
行为型模式侧重于对象的响应性,利用对象之间的交互实现更强大的功能
其中对象用于封装在完成一项操作或在触发一个事件时所需的全部信息:
1、方法名称
2、拥有方法的对象
3、方法参数的值

命令模式术语

Command: 声明执行操作的接口
ConcreteCommand:将一个Receiver对象和一个操作绑定在一起
Receiver:创建ConcreteCommand对象并设定其接收者
Invoker:要求该ConcreteCommand执行这个请求
Client:知道如何实施与执行一个请求相关的操作

执行流程:
客户端请求执行命令,
调用者接受命令,封装它并将其放置到队列中,
ConcreteCommand类根据所请求的命令来知道接收者执行特定的动作

命令模式主要意图

1、将请求封装为对象
2、可用不同的请求对客户进行参数化
3、允许将请求保存在队列中
4、提供面向对象的回调

命令模式适用场景

1、根据需要执行的操作对对象进行参数化
2、将操作添加到队列并在不同地点执行请求
3、创建一个结构来根据较小操作完成高级操作

命令模式应用

1、重做或回滚操作
2、异步任务执行

命令模式的优点

1、将调用操作的类与知道如何执行该操作的对象解耦
2、提供队列系统后,可以创建一系列命令
3、添加新命令更容易,并且无需更改现有代码
4、可以使用命令模式定义回滚系统

命令模式的缺点

1、为了实现目标,需要大量的类和对象进行协作
2、每个单独的命令都是一个ConcreteCommand类,从而增加了需要实现和维护的类的数量

代码实例:

# -*- coding: utf-8 -*-

from abc import ABCMeta, abstractmethod


# 提供接口Command
class Order(metaclass=ABCMeta): @abstractmethod def execute(self): pass


# 具体命令 ConcreteCommand
class BuyStockOrder(Order): def __init__(self, stock): self.stock = stock def execute(self): self.stock.buy()


class SellStockOrder(Order): def __init__(self, stock): self.stock = stock def execute(self): self.stock.sell()


# Receiver对象
class StockTrade(object): def buy(self): print("buy stock") def sell(self): print("sell stock")


# 调用者Agent,中介
class Broker(object): def __init__(self): self.__order_list = []  # 订单队列 def add_order(self, order): self.__order_list.append(order) def place_order(self): for order in self.__order_list: order.execute() self.__order_list.clear()


if __name__ == '__main__': # client stock = StockTrade() buy_stock = BuyStockOrder(stock) sell_stock = SellStockOrder(stock) # invoker broker = Broker() broker.add_order(buy_stock) broker.add_order(sell_stock) broker.place_order()
"""
buy stock
sell stock
"""


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

参考
《Python设计模式第2版》第七章 命令模式-封装调用

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/92844998

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。