惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
Recent Announcements
Recent Announcements
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
The GitHub Blog
The GitHub Blog
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - zhanqiangz(闲云野鹤)

在ReportService2005.asmx 找不到 ReportingService2005 类 BizTalk相关的问题,打算持续更新。 恢复被格式化过的硬盘数据 BizTalk - Most possible reason for “is Delimiters are not unique” in EDI transaction What happens if BizTalk artifacts are not GACed? XmlSerializer is not trustable BizTalk - How to create custom functoid. BizTalk - Carefully use Send Port Group BizTalk - How to debug map in VS2005 BizTalk-Get to know functoid. BizTalk - String Functoids 一辈子都忘不了的七夕节 Head First Design patterns笔记-Singleton patterns (从“一夫一妻制社会中婚约的达成”看单件模式) Global.asax文件里的Application_Init能触发吗? 使用HttpApplication实例(翻译) Head First Design patterns笔记-Observer Patterns (从TFS的Project alerts功能看观察者模式) ASP.NET 2.0的编译行为 Head First Design patterns笔记-Strategy Patterns (从不同的人使用不同的交通工具上班看策略模式) 晕菜了,TFS居然把vss里的那个rollback功能cut掉了,还好有人写了工具.
Head First Design patterns笔记-Decorator Patterns (从”用...
zhanqiangz(闲云野鹤) · 2007-05-10 · via 博客园 - zhanqiangz(闲云野鹤)

定义Decorator patterns attach additional responsibilities abilities(我自己加的) to an object dynamically, decorators provide a flexible alternative to subclassing for extending functionality.

背景介绍:学习是人类与生俱来的一种能力。当然像哭泣、微笑、吃饭、睡觉等能力人一来到这个世界就会。当你学习了一种技能你就会多一种行为能力。用不同的技能把自己武装起来,你就会成为一个多才多艺的人,^_^。就我自己而言,吃喝拉撒睡这些就不用再提了,小学四年纪的时候学会了游泳(在同伴当中应该算是学的很晚的),大约六年级的时候开始摸篮球,算起球龄来也差不多15年了,不能算高手中的低手至少也应该算是低手中的高手了(大学的时候也是靠球技迷倒一片的,^_^。稍微自恋一下)。大学修的计算机科学与技术,毕业来北京混饭吃做了一年多的开发。后来走投无路做了一年测试,最后还是脱离了枯燥的测试工作重新做开发。算起来这几项能力我也算都具备了,现在除了做好自己的开发工作,我也会协助同事做一些测试的工作,工作之余我会参加一些游泳,篮球的比赛活动,业余时间教我老婆这几项技能,^_^。这篇文章的例子正是模拟人与技能之间的这种关系,我的一个朋友一直做开发,现在正在学习游泳,基本不会打球,这个例子把他拉进来吧!^_^。

VS自动生成的类图:
VS自动生成的类图看起来还真不大习惯,下次可能用PD了。^_^。

实例代码:

查看代码

运行结果图

本例引出的面向对象原则
类可以用来扩展,但是不应该被修改。(classes should be open for extension but closed for modification.)
此外本例也体现了面向接口编程的思想,在decorator的具体实现中应用了一个IHuman对象,而不是应用ConcreteHuman对象正说明了这一点。如果你想扩展subject的功能,那你就实现自己的decorator就可以,无需修改subject内的任何代码。

代码下载:
DecoratorDemo.zip

后续:
装饰模式最最关键的一点是主体(subject)和修饰者(decorator)应该有共同的接口,对于本例而言就是ConcreteHuman SkillBase两个类都继承自IHuman这个接口。