职责链模式lua实现

来源:互联网 发布:手机淘宝注册店铺步骤 编辑:程序博客网 时间:2024/06/04 18:43
--[[职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。应用:1、有多个对象处理请求,到底怎么处理在运行时确定。2、希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。3、可处理一个请求的对象集合应该被动态指定。]]--Handler = {}function Handler:new(o)o = o or {}setmetatable(o,self)self.__index = selfreturn o;endfunction Handler:SetSuccessor(s)self.successor = sendConcreteHandler1 = Handler:new()function ConcreteHandler1:HandleRequest(r)if r <= 10 thenprint("Handler1处理了请求")elseif self.successor thenself.successor:HandleRequest(r)endendConcreteHandler2 = Handler:new()function ConcreteHandler2:HandleRequest(r)if r > 10 and r <= 20 thenprint("Handler2处理了请求")elseif self.successor thenself.successor:HandleRequest(r)endendConcreteHandler3 = Handler:new()function ConcreteHandler3:HandleRequest(r)if r > 20 thenprint("Handler3处理了请求")elseif self.successor thenself.successor:HandleRequest(r)endendh1 = 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处理了请求

原创粉丝点击