首页 > 代码库 > 设计模式实例(Lua)笔记之七(Decorator模式)

设计模式实例(Lua)笔记之七(Decorator模式)

1.描写叙述


       就说说"我"上小学的的糗事吧。

我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,依照老师给我的定义就是“不是读书的料”,可是我老爸管的非常严格,明知道我不是这块料,还是往赶鸭子上架,每次考试完成我都是战战兢兢的,“竹笋炒肉”是肯定少不了的,能少点就少点吧,肉可是自己的呀。

四年级期末考试考完,学校出来个非常损的招儿(这招儿如今非常流行的),打印出成绩单,要家长签字,然后才干上五年级,我那个恐惧呀,只是也就是几秒钟的时间,玩起来什么都忘记了。当时。我的成绩(语文 62 数学65 体育 98 自然 63),你要知道在小学低于 90 分基本上就是中下等了,唉,爱学习的人太多了!怎么着,那我把这个成绩单给老爸看看?

就这成绩还要我签字?

!老爸就開始找笤帚,我的屁股已经做好了准备,肌肉要绷紧,要不那个太疼了!哈哈,幸运的是,这个不是当时的真实情况,我没有直接把成绩单交给老爸,而是在交给他之前做了点技术工作,我要把成绩单封装一下,封装分类两步走:

第一步:跟老爸说各个科目的最高分,语文最高是 75,数学是 78,自然是 80,然老爸觉的我成绩与最高分数相几乎相同,这个是实情,可是不知道是什么原因,反正期末考试都考的不怎么样,可是基本上都集中在 70 分以上,我这 60 多分基本上还是垫底的角色;

第二步:在老爸看成绩单后,告诉他我是排名第 38 名,全班,这个也是实情,为啥呢?

有将近十个同学退学了!这个情况我是不说的。不知道是不是当时第一次发成绩单,学校没有考虑清楚,没有写上总共同拥有多少同学,排名第几名等等,反正是被我钻了个空子。类图例如以下:



技术分享


2.代码

require "class"

--------ISchoolReport-------
ISchoolReport = class()

function ISchoolReport:Report()

end

function ISchoolReport:Sign(name)

end

--------FouthGradeSchoolReport-------
FouthGradeSchoolReport = class(ISchoolReport)

function FouthGradeSchoolReport:Report()
	print("----------FouthGradeSchoolReport:Report-----------")
	print("尊敬的XXX家长:")
	print(".......")
	print("语文62  数学65  体育98  自然63")
	print(".......")
	print("                家长签名:")
end

function FouthGradeSchoolReport:Sign(name)
	print("家长签名为:", name)
end

--------ReportDecorator-------
ReportDecorator = class(ISchoolReport)

function ReportDecorator:ctor(psr)
	self.m_pSchoolReport = psr
end

function ReportDecorator:IReport()
	print("----------ReportDecorator:IReport-----------")
	self.m_pSchoolReport:Report()
end

function ReportDecorator:Sign(name)
	self.m_pSchoolReport:Sign(name)
end

--------HighScoreDecorator-------
HighScoreDecorator = class(ReportDecorator)

function HighScoreDecorator:Report()
	print("----------HighScoreDecorator:Report-----------")
	self:ReportHighScore()
	self:IReport()
end

function HighScoreDecorator:ReportHighScore()
	print("这次考试语文最高是75, 数学是78, 自然是80")
end

--------SortDecorator-------
SortDecorator = class(ReportDecorator)

function SortDecorator:ReportSort()
	print("我是排名第38名...")
end

function SortDecorator:Report()
	print("----------SortDecorator:Report-----------")
	self:IReport()
	self:ReportSort()
end

--------test-------
function DoIt()
	local psr = FouthGradeSchoolReport.new()
	psr:Report()
	psr:Sign("老三")
end

function DoNew()
	print("----------分部分进行装饰----------")
	local psr = FouthGradeSchoolReport.new()   -- 原装成绩单
	local pssr = SortDecorator.new(psr) 		-- 又加了成绩排名的说明
	local phsr = HighScoreDecorator.new(pssr)  -- 加了最高分说明的成绩单

	phsr:Report()
	phsr:Sign("老三")
end

--- main ---
function main()
	--DoIt()
	DoNew()
end

main()
执行结果:


      技术分享


设计模式实例(Lua)笔记之七(Decorator模式)