python学习 - 设计模式 - 命令模式实例代码

#!/usr/bin/python
# -*- coding:UTF-8 -*-
# @Software: PyCharm

"""
命令模式 Command: 将一个请求封装为一个对象,从而使你可用不得请求对客户进行参数化;
对请求排队或记录请求日志,以及支持可撤销的操作.
命令模式作用:
1.他能较容易地设计一个命令队列
2.在需要的情况下可以较容易的将命令计入日志
3.允许接受请求的一方就决定是否要否决请求
4.可以容易地实现对请求的撤销和重做
5.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易
6** 命令模式把请求一个操作的对象与知道怎么执行一个操作对象分割开!!!

敏捷开发原则告诉我们:不要为代码添加基于猜测的,实际不需要的功能.如果不清楚一个系统是否需要命令模式,一般不要着急实现它,
事实上在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作功能时,把原来的代码重构为命令模式才有意义.
"""
# 抽象命令
from abc import *


class Command(object):
    __metaclass__ = ABCMeta

    def __init__(self, barbecuer):
        self.barbecuer = barbecuer

    @abstractmethod
    def excuteCommand(self): pass


# 具体命令类
class BakeMuttonCommand(Command):
    def excuteCommand(self):
        print "通知烤肉工>>烤肉串"
        self.barbecuer.excute()


# 烤鸡翅命令类
class BakeChickenWingCommand(Command):
    def excuteCommand(self):
        print "通知烤肉工>>烤鸡翅"
        self.barbecuer.excute()


# 烤肉串者
class Barbecuer(object):
    def excute(self):
        print "开始烤串"


# 服务员
class Waiter(object):
    def __init__(self):
        self.command = None

    def setOrder(self, command):
        self.command = command

    def Notify(self):
        self.command.excuteCommand()


if __name__ == '__main__':
    barbecuer = Barbecuer()  # 烤串者
    command1 = BakeMuttonCommand(barbecuer) #烤肉串
    command2 = BakeChickenWingCommand(barbecuer) #烤肉串
    waiter = Waiter()#服务员

    waiter.setOrder(command1)
    waiter.Notify()

    waiter.setOrder(command2)
    waiter.Notify()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值