您的位置:首页 > 编程语言 > Lua

《23种设计模式 Lua篇》 - 观察者模式

2014-08-26 19:53 211 查看
当观察哨发现入侵者,通知正在上班的警卫。

一、Observer .lua  警卫基类

--/**************************************************************************
-- Copyright: www.SaintGrail.com
-- Author: liu jing
--- Date: 2014-08-26
--- Description: 抽象基类
---**************************************************************************/
Observer={}

-- 名称
Observer.name=""

function Observer:new(_o)
_o = _o or {}
setmetatable(_o,self)
self.__index=self
return _o
end

-- 动作
function Observer:run()
print(self.name.."跑起来")
end



二、PoliceObserver.lua 普通警卫(继承至Observer   警卫基类)

--/**************************************************************************
-- Copyright: www.SaintGrail.com
-- Author: liu jing
--- Date: 2014-08-26
--- Description: 警察
---**************************************************************************/
require ("Observer")
-- 继承
PoliceObserver = Observer:new()

-- 重写子类 run 方法
function PoliceObserver:run()
print(self.name.."Run 2")
end


三、ObservationPost.lua  观察哨类

--/**************************************************************************
-- Copyright: www.SaintGrail.com
-- Author: liu jing
--- Date: 2014-08-26
--- Description: 观察哨
---**************************************************************************/
require ("Observer")

ObservationPost={}

function ObservationPost:new(_o)
_o = _o or {}
setmetatable(_o,self)
self.__index=self
return _o
end

--警卫列表
ObservationPost.ObserverList={}

--增加警卫
function ObservationPost:add(_obs)
table.insert(self.ObserverList,_obs)
end

--消息通知
function ObservationPost:Notify()
for k,v in ipairs(self.ObserverList) do
local obs=self.ObserverList[k]
if(k) then
obs:run()
end
end
end



四、main.lua  主函数调用
require ("PoliceObserver")
require ("ObservationPost")
local function main()
-- 初始化 两个警卫
local police=PoliceObserver:new()
police.name="police_1 "
local police2=PoliceObserver:new()
police2.name="police_2 "
--创建观察哨对象
obs=ObservationPost:new()
--将警卫添加到观察哨通知列表
obs:add(police)
obs:add(police2)
-- 发现入侵者 通知所有警卫
obs:Notify()
end
main()


五、输出结果如下
Debugger v1.1.0
Debugger: Trying to connect to 127.0.0.1:10000 ...
Debugger: Connection succeed.
police_1 Run 2
police_2 Run 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: