設計模式 命令列模式
阿新 • • 發佈:2018-11-12
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
客戶類
在客戶類中需要建立呼叫者物件、具體命令類物件,在建立具體命令物件時指定對應的接收者。傳送者和接收者之間沒有直接關係,都通過命令物件間接呼叫。