[Lua] 루 아 에서 의 관찰자 모드 구현

1489 단어 Lua
--LUA          

--     
Subject = {}
--    ,    lua             :
--http://www.jb51.net/article/55724.htm
function Subject:new(obj)
	obj = obj or {}
	setmetatable(obj, self)  --       Subject,    Subject    
	-- Father __index      ,            key       ,   Father   key
	self.__index = self
end

CreateSubject = Subject:new()
--  
function CreateSubject:Add(obs)
	if self.observers == nil then
		self.observers = {}
	end
	table.insert(self.observers,obs)
end
--  
function CreateSubject:Del(obs)
	for k, v in pairs(self.observers) do
		if v == obs then
			table.remove(self.observers,k)
			break
		end
	end
end

function ConcreteSubject:Notify()
	for _, v in pairs(self.observers) do
		v:Update()
	end
end

Observe = {}

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

CreateObserver = Observer:new()

function CreateObserver:new(s,n)
	obj = {}
	setmetatable(obj,self)
	self.__index = self
	obj.subject = s
	obj.observername = n
	return obj
end

function CreateObserver:Update()
 print(self.observername.."!!"..self.subject.subjectstate)
end

s = CreateSubject:Update()

xiyangyang = CreateObserve:new(s,"   ")
meiyangyang = CreateObserve:new(s,"   ")
lanyangyang = CreateObserve:new(s,"   ")

s:Add(xiyangyang)
s:Add(meiyangyang)
s:Add(lanyangyang)

s.subjectstate = "         !"
s.Notify()

s:Del(lanyangyang)

s.subjectstate = "        !"

s:Notify()




좋은 웹페이지 즐겨찾기