设计模式实例(Lua)笔记之七(Decorator模式)
1.描写叙述
就说说"我"上小学的的糗事吧。
我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,依照老师给我的定义就是“不是读书的料”,可是我老爸管的非常严格,明知道我不是这块料,还是往赶鸭子上架,每次考试完成我都是战战兢兢的,“竹笋炒肉”是肯定少不了的,能少点就少点吧,肉可是自己的呀。
四年级期末考试考完,学校出来个非常损的招儿(这招儿如今非常流行的),打印出成绩单,要家长签字,然后才干上五年级,我那个恐惧呀,只是也就是几秒钟的时间,玩起来什么都忘记了。当时。我的成绩(语文 62 数学65 体育 98 自然 63),你要知道在小学低于 90 分基本上就是中下等了,唉,爱学习的人太多了!怎么着,那我把这个成绩单给老爸看看?
就这成绩还要我签字?
!老爸就開始找笤帚,我的屁股已经做好了准备,肌肉要绷紧,要不那个太疼了!哈哈,幸运的是,这个不是当时的真实情况,我没有直接把成绩单交给老爸,而是在交给他之前做了点技术工作,我要把成绩单封装一下,封装分类两步走:
第一步:跟老爸说各个科目的最高分,语文最高是 75,数学是 78,自然是 80,然老爸觉的我成绩与最高分数相几乎相同,这个是实情,可是不知道是什么原因,反正期末考试都考的不怎么样,可是基本上都集中在 70 分以上,我这 60 多分基本上还是垫底的角色;
第二步:在老爸看成绩单后,告诉他我是排名第 38 名,全班,这个也是实情,为啥呢?
有将近十个同学退学了!这个情况我是不说的。不知道是不是当时第一次发成绩单,学校没有考虑清楚,没有写上总共同拥有多少同学,排名第几名等等,反正是被我钻了个空子。类图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmV4dWVmZW5neWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
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模式)的更多相关文章
- 《图解设计模式》读书笔记5-2 decorator模式
目录 代码演示 模式的角色和类图 思路拓展 Decorator模式即装饰器模式,就是对类进行装饰,下面通过代码说明. 代码演示 代码展示的内容 有一个类StringDisplay:表示一句话,比如he ...
- 设计模式实例(Lua)笔记之四(Builder 模式)
1.描写叙述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...
- 设计模式实例(Lua)笔记之五(Bridge模式)
1.描写叙述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是 ...
- 设计模式实例(Lua)笔记之六(Adapter模式)
1.描写叙述 "我"在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三 ...
- 设计模式(十二)Decorator模式
Decorator模式就是不断地为对象添加装饰的设计模式.以蛋糕为例,程序中的对象就相当于蛋糕,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象. 首先看示例程序的类图. ...
- 《图解设计模式》读书笔记9-2 Proxy模式
目录 Proxy模式 示例程序 程序描述 类图 程序 角色和类图 角色 模式类图 思路拓展 提升速度 代理与委托 Http代理 与其他模式的关联 Decorator模式 Proxy模式 Proxy是代 ...
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合. 看代码: 7.1.解释 main(),女 ...
- 《Head First 设计模式》学习笔记——适配器模式 + 外观模式
在ADO.NET中.对于我们从数据库中取出的数据都要放到一个DataSet中,无论你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供 ...
- 设计模式C++描述----10.装饰(Decorator)模式
一. 举例 我之前做过一个文件系统就叫 MyFileSys 吧,后来的话,客户想加入一些附加功能,比如压缩.加密.杀毒之类的操作,这些附加操作没有先后顺序,比如你可以先压缩再加密,也可以先杀毒再压缩, ...
随机推荐
- idea常用方便的快捷键
Ctrl+D 复制行Ctrl+F 查找文本Ctrl+G 定位到某行Ctrl+H 显示类结构图(类的继承层次)Ctrl+I 实现方法ctrl+J 显示所有快捷键模板ctrl+k 提交代码到SVNCrtl ...
- rails 修改数据库之后注意修改controller
rails 修改数据库之后注意修改controller 在view中进行修改之后,注意修改controller中的内容: 这样才可以进行参数的传递:
- iOS_自己定义毛玻璃效果
终于效果图: 关键代码: UIImage分类代码 // // UIImage+BlurGlass.h // 帅哥_团购 // // Created by beyond on 14-8-30. // C ...
- Linux性能优化和监控系列(一)——top工具
解释服务器发生了什么——top工具 在检查服务器的详细工作性能状态前,系统管理员需要对当前服务器状态有总体的了解. top是检查服务器总体状态的强有力工具, 通过top可以获取CPU, Memory, ...
- 【BZOJ 2038】小Z的袜子
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2038 [算法] 莫队算法 [代码] #include<bits/stdc++. ...
- WCF:目录
ylbtech-WCF:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.c ...
- [JavaEE]Hibernate 所有缓存机制详解
Hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...
- 关于数据未渲染完,要获取document高度问题——ajax全局事件
昨天在做开发时,遇到这样一个问题,当页面刚加载的时候,就要获取document的高度,可是此时页面上所有的ajax请求的数据都还没有渲染到页面上,所以导致得到的document的高度仅仅是页面结构的高 ...
- <Android Framework 之路>Android5.1 Camera Framework(三)
上一次讲解了一下startPreview过程,主要是为了画出一条大致的从上到下的线条,今天我们看一下Camera在Framework的sendCommand和dataCallback,这部分属于衔接过 ...
- Data type-数据类型
操作方式.含义.存储方式. In computer science and computer programming, a data type or simply type is a classifi ...