命令模式lua實現

2022-09-23 15:00:09 字數 2154 閱讀 4735

--[[

優點:

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

如有不正確,歡迎交流討論!

Lua模式匹配

模式匹配函式 在string庫中功能最強大的函式是 string.find 字串查詢 string.gsub 全域性字串替換 string.gfind 全域性字串查詢 string.gmatch 返回查詢到字串的迭代器 這些函式都是基於模式匹配的。與其他指令碼語言不同的是,lua並不使用posix規...

Lua模式匹配

模式匹配函式 在string庫中功能最強大的函式是 string.find 字串查詢 string.gsub 全域性字串替換 string.gfind 全域性字串查詢 string.gmatch 返回查詢到字串的迭代器 這些函式都是基於模式匹配的。與其他指令碼語言不同的是,lua並不使用posix規...

Lua模式匹配

模式匹配函式 在string庫中功能最強大的函式是 string.find 字串查詢 string.gsub 全域性字串替換 string.gfind 全域性字串查詢 string.gmatch 返回查詢到字串的迭代器 這些函式都是基於模式匹配的。與其他指令碼語言不同的是,lua並不使用posix規...