设计模式实例(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 吧,后来的话,客户想加入一些附加功能,比如压缩.加密.杀毒之类的操作,这些附加操作没有先后顺序,比如你可以先压缩再加密,也可以先杀毒再压缩, ...
随机推荐
- CF914A Perfect Squares
CF914A Perfect Squares 题意翻译 给定一组有n个整数的数组a1,a2,…,an.找出这组数中的最大非完全平方数. 完全平方数是指有这样的一个数x,存在整数y,使得x=y^2y2 ...
- VC6 编译和使用 STLPort
1.下载 STLport: http://www.stlport.org/ http://downloads.sourceforge.net/project/stlport/STLport/S ...
- HTML5开发移动web应用——Sencha Touch篇(8)
DataView是Sencha Touch中最重要的组件,用于数据的可视化.数据可视化的重要性不言而喻,能够讲不论什么数据以形象的方式展示给用户. 眼下,怎样更好地可视化是很多公司或框架都在追求的. ...
- Oracle 单表选择率
听了猫大师的课,对Oracle CBO又加深了一步理解: 单表选择率: selectivity=1/ndv*a4nulls ocard来自dba_tables.num_rows ndv 来自dba_t ...
- HDOJ 2647 Reward 【逆拓扑排序+分层】
题意:每一个人的基础工资是888. 因为一部分人要显示自己水平比較高,要求发的工资要比其它人中的一个人多.问你能不能满足他们的要求,假设能的话终于一共要发多少钱,假设不能就输出-1. 策略:拓扑排序. ...
- wifi破解不是真黑客不靠谱?
Wifi破解神器骗局:摆地摊+网络兜售 近日,"万能wifipassword破解器"风靡全国地摊.各地小贩開始兜售这样的蹭网卡.声称可破解各种wifipassword,当场測试也是 ...
- angularjs1-8,cacheFactory,sce
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- 在单机上安装多个oracle实例
1 在 hp unix上安装 oracle 10g ,这个不解释,直接安装好. 创建组oinstall,dba,用户oracle [root@node1 ~]# groupadd oinstal ...
- .NET Core开发:项目实践
初始化项目 本来想详细讲一讲dotnet core的,但我对于dotnet core的研究还不到一星期,半吊子,脑子又笨,就不写那些理论出来误人子弟了,还是直接来一篇实践给大家做个参考.废话不多说,直 ...
- nginx令牌限制并发
http{ limit_req_zone $binary_remote_addr zone=req_one:10m rate=100r/s; server { listen 8080; server_ ...