命令模式(python)
来源:互联网 发布:网络综合布线图 编辑:程序博客网 时间:2024/05/18 15:57
"""命令模式在请求者和请求实现者之间,把请求抽象成命令,并添加一个命令接受和分发者,实现请求者和实现者的解耦如客户(请求者)去烧烤店吃饭,并不需要认识烧烤boy(实现者),只需要有菜单(命令),服务员(命令接收和分发者),然后根据菜单给服务员下单就好了。然后菜单有会有记录,我们可以要求撤销和重做,烧烤店可以拒绝我们的某个菜单。优点:1、可以有一个命令列表;2、命令可以很容易写入日志;3、命令可以被撤销或重做;4、命令实现者可以拒绝命令;5、实现了请求者和实现者的解耦;6、要加入新的命令很容易,增加个命令类,实现者能做对应的命令"""from abc import ABCMeta, abstractmethodclass Cooker(object): """ 厨师 """ def __init__(self): self._num_yang = 1 self._num_niu = 1 def cook_yang(self): if self._num_yang <= 3: print("烧烤羊肉串") self._num_yang += 1 else: print("没羊肉串了") def cook_niu(self): if self._num_niu <= 3: print("烧烤牛肉串") self._num_niu += 1 else: print("没牛肉串了")class Command(object): """ 抽象菜单 """ __metaclass__ = ABCMeta def __init__(self, name): self.cooker = Cooker() self.name = name @abstractmethod def cook(self): passclass CommandYang(Command): def __init__(self, name): super(CommandYang, self).__init__(name) def cook(self): self.cooker.cook_yang()class CommandNiu(Command): def __init__(self, name): super(CommandNiu, self).__init__(name) def cook(self): self.cooker.cook_niu()class Waiter(object): def __init__(self): self._command_list = [] self._menu = None self._kehu = None def set_kehu(self, kehu): self._kehu = kehu def set_order(self, command, num=1): print("加菜:" + command.name) for i in range(num): self._command_list.append(command) def remove_order(self, command, num=1): print("减菜:" + command.name) try: for i in range(num): self._command_list.remove(command) except Exception as e: print("没点那么多菜") def notify(self): print("下单啦:") self._menu = Order(self._kehu, self._command_list) self._menu.show() for command in self._command_list: command.cook() self._command_list = [] print("")class Order(object): def __init__(self, name, command_list): self._command_list = command_list self._name = name def set_order(self, command_list): self._command_list = command_list def set_name(self, name): self._name = name def show(self): print(self._name + ",您的菜单是:") for command in self._command_list: print(command.name) print("")if __name__ == '__main__': # 烧烤店初始化 command_yang = CommandYang("羊肉串") command_niu = CommandNiu("牛肉串") waiter = Waiter() # 营业 waiter.set_kehu("张三") waiter.set_order(command_yang, 4) waiter.set_order(command_niu, 5) waiter.notify()
0 0
- 命令模式(python)
- 命令模式(python)
- Python设计模式-命令模式
- python设计模式(命令模式)
- 设计模式十五(命令模式,python语言实现)
- python设计模式之命令调度模式
- python的命令模式和编辑模式
- Python设计模式(七)【命令模式】
- 设计模式-命令模式-command-python
- python设计模式之命令模式
- 命令模式(14)--命令模式
- 命令模式(遥控器模式)
- 模式十六(命令模式)
- 设计模式(命令模式)
- 命令(Command)模式
- 命令(Command)模式
- 命令(Command)模式
- 命令模式(Command)
- 2016反思以及后续规划
- C++ Maps & MultiMaps
- CentOS 5/6/7网卡绑定方案
- Spring Boot系列教程六:日志输出配置log4j2
- ACM测试---5-6 帅到没朋友 (20分)
- 命令模式(python)
- ASP.Net: EshineASPNet教程-身份证校验与正则
- 【ARM-Linux开发】Rico Board DIY系列实验教程 Day 2——搭建Boa服务器
- C++ Sets & MultiSets
- android连接小票打印机,打印小票数据的两种模式
- HSV(HSB) - HSI(HSl)
- 组合模式(python)
- C++ Stacks(堆栈)
- 1.1 用两个栈实现一个队列