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

職責鏈模式lua實現

編輯:C#入門知識

--[[
	職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這個對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
	應用:
	1、有多個對象處理請求,到底怎麼處理在運行時確定。
	2、希望在不明確指定接收者的情況下,向多個對象中的一個提交請求。
	3、可處理一個請求的對象集合應該被動態指定。
]]--

Handler = {}

function Handler:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

function Handler:SetSuccessor(s)
	self.successor = s
end


ConcreteHandler1 = Handler:new()

function ConcreteHandler1:HandleRequest(r)
	if r <= 10 then
		print("Handler1處理了請求")
	elseif self.successor then
		self.successor:HandleRequest(r)
	end

end

ConcreteHandler2 = Handler:new()

function ConcreteHandler2:HandleRequest(r)
	if r > 10 and r <= 20 then
		print("Handler2處理了請求")
	elseif self.successor then
		self.successor:HandleRequest(r)
	end
end

ConcreteHandler3 = Handler:new()

function ConcreteHandler3:HandleRequest(r)
	if r > 20 then
		print("Handler3處理了請求")
	elseif self.successor then
		self.successor:HandleRequest(r)
	end
end

h1 = ConcreteHandler1:new()
h2 = ConcreteHandler2:new()
h3 = ConcreteHandler3:new()

h1:SetSuccessor(h2)
h2:SetSuccessor(h3)

print("*********************實例一***********************")
h1:HandleRequest(25)
h2:HandleRequest(5)
h3:HandleRequest(15)

print("*********************實例二***********************")
h1:HandleRequest(25)
h1:HandleRequest(5)
h1:HandleRequest(15)
--[[
	PS:
	當時"弄懂"了職責鏈模式後,不禁心裡大罵:尼瑪,這不就是狀態模式嗎?!
	後來細心地發現了其中的不同:
	狀態模式:後一個狀態的處理對象早已在類的內部設定好了。
	職責鏈模式:後一個請求的處理對象由客戶端來設定。

]]--
狀態模式lua實現 輸出結果: *********************實例一*********************** Handler3處理了請求 *********************實例二*********************** Handler3處理了請求 Handler1處理了請求 Handler2處理了請求

  1. 上一頁:
  2. 下一頁: