Python设计模式之命令模式

本文介绍了Python中的命令模式,这是一种行为设计模式,用于封装触发事件所需的所有信息。通过命令模式,调用操作的类与执行操作的对象得以分离。文章以证券交易所买卖股票为例,阐述了命令模式的实现,并讨论了其优点,如易于添加新命令,可结合队列实现回滚系统,以及缺点,如增加类的数量和维护复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令模式——封装调用

  • 命令模式是一种行为设计模式,他用于封装触发事件(完成任何一个操作)所包含的所有信息。一般有方法名称,拥有方法对象,方法参数等。

一个安装向导的例子:每一步选择的都会存在Command对象里,在最后一步点击finish的时候,Command会运行execute进行安装。

class Wizard(object):
    def __init__(self, src, rootdir):

        self.choices = []
        self.rootdir = rootdir
        self.src = src

    def preferences(self, command):
        self.choices.append(command)

    def execute(self):

        for choice in self.choices:
            if list(choice.values())[0]:
                print("Copying binaries --", self.src, " to ", self.rootdir)
            else:
                print("No Operation")


if __name__ == '__main__':
    wizard = Wizard('python', 'bin')
    wizard.preferences({'python': True})
    wizard.preferences({'java': False})
    wizard.execute()

实现

证券交易所的例子

我想卖一个股票,在开市之前我提交给证券交易所卖股票申请,等股市一开,证券交易所就帮我卖掉

# 客户下订单的接口
from abc import ABCMeta, abstractmethod


class Order(metaclass=ABCMeta):
    @abstractmethod
    def execute(self):
        pass


# 具体实现类
# 买卖方法,execute来执行
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()


# StockTrade实现buy和sell方法
class StockTrade:
    def buy(self):
        print('买股票')

    def sell(self):
        print('卖股票')


# 调用者
class Agent:
    def __init__(self):
        self.__orderQueue = []

    def place_order(self, order):
        self.__orderQueue.append(order)
        order.execute()


if __name__ == '__main__':
    # 客户端
    stock = StockTrade()
    buy_stock = BuyStockOrder(stock)
    sell_stock = SellStockOrder(stock)

    # 命令者
    agent = Agent()
    agent.place_order(buy_stock)
    agent.place_order(sell_stock)
    
    '''结果
    买股票
    卖股票'''

命令模式的优缺点

优点
  • 把调用操作的类与知道如何执行该操作的对象分开了
  • 结合队列可以创造一系列命令
  • 添加命令方便,不用改现有代码
  • 可以用命令模式定义回滚系统
缺点
  • 要很多类和对象协作,要确保正确
  • 每个单独的命令都是一个类,增加了实现和维护的类的数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值