1. 程式人生 > >設計模式 命令列模式

設計模式 命令列模式

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客戶類
    在客戶類中需要建立呼叫者物件、具體命令類物件,在建立具體命令物件時指定對應的接收者。傳送者和接收者之間沒有直接關係,都通過命令物件間接呼叫。