设计模式 命令行模式

class TeaMilk:
    def __init__(self):
        pass
    def prepare(self):
        pass

class Recevier:
    def __init__(self):
        pass
    def prepareRedTeaMilk(self):
        print('prepare red tea milk')

    def prepareBlackTeaMilk(self):
        print('prepare black tea milk')

class RedTeaMilk(TeaMilk):
    def __init__(self, Recevier):
        self.recevier = Recevier
    def prepare(self):
        self.recevier.prepareRedTeaMilk()

class BlackTeaMilk(TeaMilk):
    def __init__(self, Recevier):
        self.recevier = Recevier
    def prepare(self):
        self.recevier.prepareBlackTeaMilk()

class waiter:
    cmd = []
    def __init__(self):
        pass
    def order(self, milk):
        self.cmd.append(milk)

    def remove(self, milk):
        print('remove obj', milk)
        self.cmd.remove(milk)

    def execute(self):
        print(self.cmd)
        for i in self.cmd:
            i.prepare()

if __name__ == '__main__':
    waiter = waiter()
    recevier = Recevier()
    redTeaMilk = RedTeaMilk(recevier)
    blackTeaMilk = BlackTeaMilk(recevier)
    waiter.order(redTeaMilk)
    waiter.order(blackTeaMilk)
    waiter.execute()
    waiter.remove(blackTeaMilk)
    waiter.execute()

命令行模式:

      把一个个请求封装成一个个对象,加入一个invoker,

  • command抽象命令类
  • ConcreteCommand具体命令类
  • Invoker调用者/请求者
    • 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收者的相关操作。
  • Receiver接收者
    接收者执行与请求相关的操作,具体实现对请求的业务处理。未抽象前,实际执行操作内容的对象
  • Client客户类
    在客户类中需要创建调用者对象、具体命令类对象,在创建具体命令对象时指定对应的接收者。发送者和接收者之间没有直接关系,都通过命令对象间接调用。

猜你喜欢

转载自www.cnblogs.com/agang-php/p/9945587.html