命令模式中的角色主要有:抽象命令、具体命令、命令接收者、命令调用者,命令接受者隔离了命令调用者和具体的命令。
代码示例:
from abc import ABCMeta
from abc import abstractmethod
class Command(metaclass=ABCMeta):
def __init__(self, receiver):
self._receiver = receiver
@abstractmethod
def execute(self):
pass
class CommandA(Command):
def execute(self):
self._receiver.oper_a()
class CommandB(Command):
def execute(self):
self._receiver.oper_b()
class CommandC(Command):
def execute(self):
self._receiver.oper_a()
self._receiver.oper_b()
class Receiver:
def oper_a(self):
print('receiver do oper a')
def oper_b(self):
print('receiver do oper b')
class Invoker:
def __init__(self):
self._commands = []
def __call__(self):
[i.execute() for i in self._commands]
def add_command(self, command):
self._commands.append(command)
if __name__ == '__main__':
invoker = Invoker()
receiver = Receiver()
invoker.add_command(CommandA(receiver))
invoker.add_command(CommandB(receiver))
invoker.add_command(CommandC(receiver))
invoker()