Python設計模式之命令模式簡單樣本,python設計模式樣本

來源:互聯網
上載者:User

Python設計模式之命令模式簡單樣本,python設計模式樣本

本文執行個體講述了Python設計模式之命令模式。分享給大家供大家參考,具體如下:

命令模式介紹:

在物件導向編程中,命令模式是概括所有方法資訊的設計模式。

此模式對象包涵方法名,及其相關參數值。

命令模式是一個分類的觀察者設計模式,在命令模式下,對象被概括為一個命令表單,此表單包涵了所有使用者需要的方法。

舉個例子:如果有個按鈕是使用者介面“red”,當被觸碰的時候,會啟動背景“turn red”介面。現在使用者並不知道,通過什麼類或者方法的介面能夠讓幕後處理“turn red”操作,但是這個命令被發送了(觸碰“red”按鈕),會使得幕後處理“turn red”操作。因此,命令模式給使用者一個介面,而不用讓使用者瞭解哪些是實際執行的程式,也不會影響到使用者程式。

實現命令模式的關鍵就是讓調用者不要包涵底層實際命令執行代碼,相同的調用者應該採用相同的介面。

命令模式是由三個組件構成,客戶,調用者,接受者。

客戶:一個執行個體化的對象

調用者:決定哪個方法被調用

接受者:實際命令的執行者

Example:

實現一個開關
切換ON/OFF
用開關ON/OFF去寫入程式碼一個事件

代碼如下:

class Switch: ''' The INVOKER class''' def __init__(self, flipUpCmd, flipDownCmd):  self.__flipUpCommand = flipUpCmd  self.__flipDownCommand = flipDownCmd def flipUp(self):  self.__flipUpCommand.execute() def flipDown(self):  self.__flipDownCommand.execute()class Light: '''The RECEIVER Class''' def turnOn(self):  print "The light is on" def turnOff(self):  print "The light is off"class Command: """The Command Abstrace class""" def __init__(self):  pass def execute(self):  passclass FlipUpCommand(Command): '''The Command class for turning on the light''' def __init__(self, light):  self.__light = light def execute(self):  self.__light.turnOn()class FileDownCommand(Command): '''The Command class for turning off the light''' def __init__(self, light):  Command.__init__(self)  self.__light = light def execute(self):  self.__light.turnOff()class LightSwitch: '''The Client Class''' def __init__(self):  self.__lamp = Light()  self.__switchUp = FlipUpCommand(self.__lamp)  self.__switchDown = FileDownCommand(self.__lamp)  self.__switch = Switch(self.__switchUp, self.__switchDown) def switch(self, cmd):  cmd = cmd.strip().upper()  try:   if cmd == "ON":    self.__switch.flipUp()   elif cmd == "OFF":    self.__switch.flipDown()   else:    print "Argument \"ON\" or \"OFF\" is required"  except Exception,msg:   print "Exception occured:%s" % msg#Execute if the file is run as a script and not imported as a moduleif __name__ == "__main__": lightSwitch = LightSwitch() print "Switch ON test" lightSwitch.switch("ON") print "Switch OFF test" lightSwitch.switch("OFF") print "Invalid Command test" lightSwitch.switch("****")

運行結果:

總結:物件導向的方法,就是這麼牛叉啊,代碼看得讓人頭暈,層層的封裝。警惕物件導向編程的過度對象化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.