《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
一、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
相关文章推荐
- 23种设计模式(8):观察者模式
- 23种设计模式之观察者模式(Observer)
- 23种设计模式(8):观察者模式
- 23种设计模式(8):观察者模式
- 23种设计模式之观察者模式
- 23种设计模式之观察者模式
- 23种设计模式(8):观察者模式
- 23种设计模式之python实现--观察者模式
- 23种设计模式(16)_行为型_观察者模式(Observer Pattern)
- 23种设计模式(8):观察者模式
- 23种设计模式(8):观察者模式
- GoF23种设计模式之行为型模式之观察者模式
- 23种设计模式(8):观察者模式
- Java开发中的23种设计模式之十五:观察者模式(Observer)
- 23种设计模式(8):观察者模式
- 23种设计模式(8):观察者模式
- GoF23种设计模式之行为型模式之观察者模式
- 23种设计模式(10):观察者模式
- 23种设计模式-8-观察者模式
- 23种设计模式(8):观察者模式