装饰器模式
2016-04-30 13:01
337 查看
[b]结构型:Decorator(装饰器模式)[/b]
装饰器模式:给爱用继承的人一个新的设计眼界。
没错,装饰器的原理是基于继承。如JDK中的IO流,InputStream就是一个抽象类,用IDE检索一下,很容易可以看出。
常用的有FileInputStream、BufferInputStream等。实际上就是在字节流处理的基础上再加一些如字符串处理的步骤。
用非程序的语言来讲,装饰器有点像是:
一个普通的人,一个漂亮的人,一个聪明的人。常见的,我们可能会觉得装饰器就像是项链、戒指等首饰,而实际上装饰器的设计模式更像是:戴着项链的和戴着戒指的人都是分开的。我们操作的都是人,而项链和戒指都是附加上去,而且可以不断叠加的。
[b]Demo:[/b]
[b] [/b]
装饰器模式:给爱用继承的人一个新的设计眼界。
没错,装饰器的原理是基于继承。如JDK中的IO流,InputStream就是一个抽象类,用IDE检索一下,很容易可以看出。
常用的有FileInputStream、BufferInputStream等。实际上就是在字节流处理的基础上再加一些如字符串处理的步骤。
用非程序的语言来讲,装饰器有点像是:
一个普通的人,一个漂亮的人,一个聪明的人。常见的,我们可能会觉得装饰器就像是项链、戒指等首饰,而实际上装饰器的设计模式更像是:戴着项链的和戴着戒指的人都是分开的。我们操作的都是人,而项链和戒指都是附加上去,而且可以不断叠加的。
[b]Demo:[/b]
[b] [/b]
package top.gabin.oa.web.design.decorator; /** * 工作者 * @author linjiabin on 16/4/30 */ public abstract class Worker { public void work() { System.out.println("我在工作,但我不知道能干嘛."); } }
package top.gabin.oa.web.design.decorator; /** * 程序员 * @author linjiabin on 16/4/30 */ public class Programmer extends Worker { @Override public void work() { System.out.println("我有程序员的技能,我会编码"); } }
/** * 项目管理人 * @author linjiabin on 16/4/30 */ public class ProjectManager extends Worker { private Worker worker; public ProjectManager(Worker worker) { this.worker = worker; } @Override public void work() { worker.work(); System.out.println("我懂得项目管理,是一个项目经理."); } }
package top.gabin.oa.web.design.decorator; import org.junit.Test; /** * 装饰器测试类 * @author linjiabin on 16/4/30 */ public class TestDecorator { @Test public void testWork() { // 程序员 Programmer programmer = new Programmer(); // 项目管理人 ProjectManager pm = new ProjectManager(programmer); // 我是一个拥有程序员技能的项目管理人 pm.work(); } }
相关文章推荐
- 基于Boost方法的人脸检测(5):在一张图片中检测人脸
- UVA 11136 Hoax or what 促销活动
- 谈谈IPC
- Java对象与Json之间的转换
- 基于Boost方法的人脸检测(4):弱分类器生成、强分类器生成(AdaBoost)
- POJ-2253-Frogger
- Kylin的Hierarchies,Derived维度方面配置优化
- 对于高质量代码的认知
- js判断手机浏览器操作系统和微信浏览器的方法
- lintcode:组成最大的数
- 同一个C语言工程不同C文件之间的函数互相调用问题(二)
- Program3_B
- 基于Boost方法的人脸检测(3):特征生成、特征值计算(积分图)
- android学习记录 Onclick事件监听
- Hanoi双塔问题(hanoi)
- 对C++中mutable、inline、volatile关键字的理解
- Leetcode - Best Time to Buy and Sell Stock
- 基于Boost方法的人脸检测(2):样本生成(切割图像、resize图像、灰度化图像、保存图片)
- POJ 2135 Farm Tour (最小费用最大流)
- 【模板】Lucas定理