設計模式實例(Lua)筆記之七(Decorator模式)

1.描寫敘述


       就說說"我"上小學的的糗事吧。post

我上小學的時候學習成績很是的差,班級上 40 多個同窗,我基本上都是在排名 45 名之後,依照老師給個人定義就是「不是讀書的料」,但是我老爸管的很是嚴格,明知道我不是這塊料,仍是往趕鴨子上架,每次考試完成我都是戰戰兢兢的,「竹筍炒肉」是確定少不了的,能少點就少點吧,肉但是本身的呀。學習

四年級期末考試考完,學校出來個很是損的招兒(這招兒現在很是流行的),打印出成績單,要家長簽字,而後才幹上五年級,我那個恐懼呀,只是也就是幾秒鐘的時間,玩起來什麼都忘記了。當時。個人成績(語文 62 數學65 體育 98 天然 63),你要知道在小學低於 90 分基本上就是中下等了,唉,愛學習的人太多了!怎麼着,那我把這個成績單給老爸看看?ui

就這成績還要我簽字?ssr

!老爸就開始找笤帚,個人屁股已經作好了準備,肌肉要繃緊,要不那個太疼了!哈哈,幸運的是,這個不是當時的真實狀況,我沒有直接把成績單交給老爸,而是在交給他以前作了點技術工做,我要把成績單封裝一下,封裝分類兩步走:code

第一步:跟老爸說各個科目的最高分,語文最高是 75,數學是 78,天然是 80,然老爸覺的我成績與最高分數相幾乎相同,這個是實情,但是不知道是什麼緣由,反正期末考試都考的不怎麼樣,但是基本上都集中在 70 分以上,我這 60 多分基本上仍是墊底的角色;數學

第二步:在老爸當作績單後,告訴他我是排名第 38 名,全班,這個也是實情,爲啥呢?it

有將近十個同窗退學了!這個狀況我是不說的。不知道是否是當時第一次發成績單,學校沒有考慮清楚,沒有寫上總共同擁有多少同窗,排名第幾名等等,反正是被我鑽了個空子。類圖例如如下:io





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()
執行結果:


      

相關文章
相關標籤/搜索