程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 命令模式lua實現

命令模式lua實現

編輯:C#入門知識

 

--[[  
    優點:  
    1.降低對象之間的耦合度。  
    2.新的命令可以很容易地加入到系統中。  
    3.可以比較容易地設計一個組合命令。  
    4.調用同一方法實現不同的功能。  
    缺點:  
    使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每一個命令都需要設計一個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。  
  
    Command類:是一個抽象類,類中對需要執行的命令進行聲明,一般來說要對外公布一個execute方法用來執行命令。  
    ConcreteCommand類:Command類的實現類,對抽象類中聲明的方法進行實現。  
    Invoker類:調用者,負責調用命令。  
    Receiver類:接收者,負責接收命令並且執行命令。  
]]--  
  
Command = {}  
  
function Command:new(r,o)  
    o = o or {}  
    setmetatable(o,self)  
    self.__index = self  
    o.receiver = r  
    return o;  
end  
  
ConcreteCommand1 = Command:new()  
  
function ConcreteCommand1:Execute()  
    self.receiver:Action1()  
end  
  
ConcreteCommand2 = Command:new()  
  
function ConcreteCommand2:Execute()  
    self.receiver:Action2()  
end  
  
Receiver = {}  
  
function Receiver:new(o)  
    o = o or {}  
    setmetatable(o,self)  
    self.__index = self  
    return o;  
end  
  
function Receiver:Action1()  
    print("來一條清蒸魚")  
end  
  
function Receiver:Action2()  
    print("來一個蛋糕")  
end  
  
Invoker = {}  
  
function Invoker:new(o)  
    o = o or {}  
    setmetatable(o,self)  
    self.__index = self  
    o.allcommand = {}  
    return o;  
end  
  
function Invoker:SetCommand(c)  
    table.insert(self.allcommand,c)  
end  
  
function Invoker:ExecuteCommand()  
    for _,v in pairs(self.allcommand) do  
        v:Execute()  
    end  
end  
--廚師 是 Receiver  
chef = Receiver:new()  
  
--下面是兩個菜(命令),執行者是Receiver(chef)  
fish = ConcreteCommand1:new(chef)  
  
cake = ConcreteCommand2:new(chef)  
  
--調用者 是服務員  
waiter = Invoker:new()  
  
--服務員下達了兩個菜(命令),執行者當然是Receiver(chef)  
waiter:SetCommand(fish)  
waiter:SetCommand(cake)  
  
--看似服務員做了兩個菜,實際是Receiver做,從而做了解耦;客人與廚師不用相互緊耦合  
waiter:ExecuteCommand()  

輸出結果: 來一條清蒸魚 來一個蛋糕     交流群:315249378 如有不正確,歡迎交流討論!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved