中介者模式lua实现

--[[
	Colleage抽象同事类。
	ConcreteColleage是具体同事类,每一个具体同事只知道本身的行为,而不了解其余同事类的状况,但它们却都认识中介者对象。
	Mediator是抽象中介者,定义了同事对象到中介者对象的接口。
	ConcreteMediator是具体中介者对象,实现抽象类的方法,它须要知道全部具体同事类,并从具体同事接受消息,向具体同事对象发出命令。

	优势是:
	各个 Colleague 减小了耦合。

	缺点是:
	因为 Mediator 控制了集中化,因而就把 Colleague 之间的交互复杂性变为了中介者的复杂性,也就是中介者会变的比任何一个 Colleague 都复杂。
]]--

--下面以六方会谈为背景
--这个会议至关于中介者

Mediator = {}

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

function Mediator:Send(c,message)
	for _,v in pairs(self.colleagues) do
		if v ~= c then
			v:GetMessage(message)
		end
	end
end


ConcreteMediator = Mediator:new()

Colleague = {}

function Colleague:new(n,m,o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	o.mediator = m
	o.name = n
	return o;
end

function Colleague:Send(message)
	print(self.name.."说:"..message)
	self.mediator:Send(self,message)
end

function Colleague:GetMessage(message)
	print(self.name.."收到:"..message)
end

China = Colleague:new()

America = Colleague:new()

Russia = Colleague:new()

Japan = Colleague:new()

SouthKorea = Colleague:new()

NorthKorea = Colleague:new()

liufang = ConcreteMediator:new()

xijinping = China:new("习近萍",liufang)

aobama = America:new("奥爸妈",liufang)

pujing = Russia:new("普惊",liufang)

anbeijinsan = Japan:new("俺被进三",liufang)

piaojinhui = SouthKorea:new("扑僅慧",liufang)

jinzhengen = NorthKorea:new("金正嗯",liufang)


table.insert(liufang.colleagues,xijinping)

table.insert(liufang.colleagues,aobama)

table.insert(liufang.colleagues,pujing)

table.insert(liufang.colleagues,anbeijinsan)

table.insert(liufang.colleagues,piaojinhui)

table.insert(liufang.colleagues,jinzhengen)

xijinping:Send("为了地区安全,我方支持半岛无核化")
print("")
jinzhengen:Send("若是咱们放弃核武,咱们就会被欺负")
print("")
aobama:Send("若是朝鲜继续发展核武,我国不排除武力去核")
习近萍说:为了地区安全,我方支持半岛无核化 奥爸妈收到:为了地区安全,我方支持半岛无核化 普惊收到:为了地区安全,我方支持半岛无核化 俺被进三收到:为了地区安全,我方支持半岛无核化 扑僅慧收到:为了地区安全,我方支持半岛无核化 金正嗯收到:为了地区安全,我方支持半岛无核化 金正嗯说:若是咱们放弃核武,咱们就会被欺负 习近萍收到:若是咱们放弃核武,咱们就会被欺负 奥爸妈收到:若是咱们放弃核武,咱们就会被欺负 普惊收到:若是咱们放弃核武,咱们就会被欺负 俺被进三收到:若是咱们放弃核武,咱们就会被欺负 扑僅慧收到:若是咱们放弃核武,咱们就会被欺负 奥爸妈说:若是朝鲜继续发展核武,我国不排除武力去核 习近萍收到:若是朝鲜继续发展核武,我国不排除武力去核 普惊收到:若是朝鲜继续发展核武,我国不排除武力去核 俺被进三收到:若是朝鲜继续发展核武,我国不排除武力去核 扑僅慧收到:若是朝鲜继续发展核武,我国不排除武力去核 金正嗯收到:若是朝鲜继续发展核武,我国不排除武力去核