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模式)的更多相关文章

  1. 《图解设计模式》读书笔记5-2 decorator模式

    目录 代码演示 模式的角色和类图 思路拓展 Decorator模式即装饰器模式,就是对类进行装饰,下面通过代码说明. 代码演示 代码展示的内容 有一个类StringDisplay:表示一句话,比如he ...

  2. 设计模式实例(Lua)笔记之四(Builder 模式)

    1.描写叙述:      又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...

  3. 设计模式实例(Lua)笔记之五(Bridge模式)

    1.描写叙述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是 ...

  4. 设计模式实例(Lua)笔记之六(Adapter模式)

    1.描写叙述 "我"在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三 ...

  5. 设计模式(十二)Decorator模式

    Decorator模式就是不断地为对象添加装饰的设计模式.以蛋糕为例,程序中的对象就相当于蛋糕,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象. 首先看示例程序的类图. ...

  6. 《图解设计模式》读书笔记9-2 Proxy模式

    目录 Proxy模式 示例程序 程序描述 类图 程序 角色和类图 角色 模式类图 思路拓展 提升速度 代理与委托 Http代理 与其他模式的关联 Decorator模式 Proxy模式 Proxy是代 ...

  7. 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)

      抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合. 看代码: 7.1.解释 main(),女 ...

  8. 《Head First 设计模式》学习笔记——适配器模式 + 外观模式

    在ADO.NET中.对于我们从数据库中取出的数据都要放到一个DataSet中,无论你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供 ...

  9. 设计模式C++描述----10.装饰(Decorator)模式

    一. 举例 我之前做过一个文件系统就叫 MyFileSys 吧,后来的话,客户想加入一些附加功能,比如压缩.加密.杀毒之类的操作,这些附加操作没有先后顺序,比如你可以先压缩再加密,也可以先杀毒再压缩, ...

随机推荐

  1. Swift入门(四)——可选类型(Optionals)与断言(Assert)

    可选类型是什么? 首先看一个问题,Swift中String类型的变量有一个叫做toInt的方法,能够把String类型变量转换为Int类型变量. var stringValue = "5&q ...

  2. Scapy介绍官方文档翻译

    关于Scapy Scapy为何如此特别 高速的报文设计 一次探測多次解释 Scapy解码而不解释 高速展示Quick demo 合理的默认值 学习Python 本人英文水平有限,翻译不当之处,请參考官 ...

  3. 字节与字符_字节流与字符流_ASCII与Unicode_GB2312_GBK_GB18030_BIG-5

    字节(Byte):通常将可表示经常使用英文字符8位二进制称为一字节. 一个英文字母(不分大写和小写)占一个字节的空间,一个中文汉字占两个字节的空间. 符号:英文标点2占一个字节,中文标点占两个字节. ...

  4. DISCUZ站点DIY后,导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法

    DISCUZ站点DIY后.导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法.这是一个常常会遇到的问题.在程序调试过程中常常的会遇到这种问题.这里提供一个自己常常使用的解决的方法,供遇到这 ...

  5. 去哪网实习总结:JavaWeb中文传參乱码问题的解决(JavaWeb)

    本来是以做数据挖掘的目的进去哪网的.结构却成了系统开发... 只是还是比較认真的做了三个月.老师非常认同我的工作态度和成果... 实习立即就要结束了,总结一下几点之前没有注意过的变成习惯和问题,分享给 ...

  6. Word技巧杂记(一)——去掉页眉上方的黑线

    今天在调整文章的格式时,突然发现在页眉的上方有一条巨粗无比的黑线,不知从何处冒出来的(如下图) 经过长时间的研究,终于发现原来这是页面的边框.解决办法也很简单: 格式->边框与底纹->页面 ...

  7. Docker私服仓库Harbor安装

    Harbor安装那里还是很简单,就是在Docker Login那里掉坑里去了,搞半天,写博客的时候,又重新安装了一遍 1.准备两台服务器 centos7 harbor 10.19.46.15 clie ...

  8. POJ 2346 DP or打表

    这题 不算重复的数.. 就变成水题了. 思路: 1.打表 2.DP 打表的: // by SiriusRen #include <cstdio> using namespace std; ...

  9. Spark SQL 编程API入门系列之Spark SQL的作用与使用方式

    不多说,直接上干货! Spark程序中使用SparkSQL 轻松读取数据并使用SQL 查询,同时还能把这一过程和普通的Python/Java/Scala 程序代码结合在一起. CLI---Spark ...

  10. windows 下安装 php-memcached 扩展

    通过 phpinfo()观察 3 个参数,即 php 版本, ts/nts, vc6/vc9 根据上步中的参数,到http://pecl.php.net/ 下载匹配的 memcache.dll 再次观 ...