设计模式——装饰器(Decorator)
来源:互联网 发布:串行12864接单片机 编辑:程序博客网 时间:2024/05/01 23:34
装饰(Decorator)模式 属于设计模式里的结构模式,通过装饰类 动态的给一个对象添加一些额外的职责。装饰模式也叫包装( wrapper )模式。装饰模式有如下的角色:
抽象构件(component)角色 :这个角色用来规范被装饰的对象,一般用接口方式给出。
具体构件(concrete component )角色 :被装饰的类。
装饰(decorator)角色 :持有一个构件对象的实例。并定义一个跟抽象构件一直的接口。
具体 (concrete decorator ) 装饰角色 :负责给具体构件添加附加职责的类。在实际使用中多数情况下装饰角色和具体装饰角色可能由一个类来承担。
装饰模式的类图如下:
装饰模式的例子在生活中很常见,比如房子装修,那房子还是那个房子,只是在房子墙壁上做粉刷,贴墙纸,挂饰品等。java里面的io流,我们经常如下使用:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
这个就是装饰模式的使用。还有句话说人靠衣装,美靠靓装。这里就举个程序媛打扮自己的例子来说装饰模式。程序媛打扮自己的模型如下
package decorator;public interface 女人 { public void 打扮(); }
package decorator;public class 程序媛 implements 女人 { @Override public void 打扮() { System.out.println("开始我是素颜。"); }}
package decorator;public class 化妆 implements 女人 { private 女人 女人; @Override public void 打扮() { 女人.打扮(); }}
package decorator;public class 画眉 extends 化妆 { private 女人 女人; public 画眉(女人 女人) { super(); this.女人 = 女人; } public void 打扮() { System.out.println("画眉了,漂亮了一些。"); 女人.打扮(); }}
package decorator;public class 刷睫毛 extends 化妆 { private 女人 女人; public 刷睫毛(女人 女人) { super(); this.女人 = 女人; } public void 打扮() { System.out.println("刷睫毛了,更漂亮了一些。"); 女人.打扮(); }}
package decorator;public class 涂口红 extends 化妆 { private 女人 女人; public 涂口红(女人 女人) { super(); this.女人 = 女人; 打扮(); } public void 打扮() { System.out.println("有了口红,哇塞,狐狸精一个!"); 女人.打扮(); }}
package decorator;public class Client { /** *作者:alaric *时间:2013-7-22下午10:57:13 *描述:测试 */ public static void main(String[] args) { 女人 女1 = new 程序媛(); new 涂口红(new 刷睫毛(new 画眉(女1))); }}
运行结果:
有了口红,哇塞,狐狸精一个!
刷睫毛了,更漂亮了一些。
画眉了,漂亮了一些。
开始我是素颜。
通过上面例子我们可以看到,装饰模式在于在原有的功能上添加新的职责。装饰模式能够提供比继承更灵活的对象扩展能力,但是也往往由于这种灵活性会是系统调用变的复杂。
- 设计模式 —— 装饰器模式(Decorator Pattern)
- 设计模式—装饰器模式(Decorator)
- 设计模式——装饰器(Decorator)
- 【设计模式】——Decorator装饰模式
- 【设计模式】—— 装饰模式Decorator
- Java设计模式——装饰器模式(Decorator)
- PHP设计模式——装饰器模式(decorator)
- 设计模式(9)——Decorator(装饰)模式
- 设计模式c#描述——装饰(Decorator)模式
- 设计模式c#描述——装饰(Decorator)模式
- 设计模式——装饰模式(Decorator)
- 设计模式之——装饰者模式(Decorator)
- 设计模式——39、装饰模式(Decorator)
- java设计模式——装饰模式(Decorator)
- 设计模式——装饰者模式(Decorator)
- java设计模式7——装饰模式(Decorator)
- 设计模式——装饰模式(Decorator)
- 39、设计模式——装饰模式(Decorator)
- Windows8的JDK环境配置
- 链表反转的实现(递归反转链表,非递归反转链表)
- exchange webservice访问类(日程新增和删除)
- The Elements of Style
- 我的学习笔记01-从工行网页抓取白银价格
- 设计模式——装饰器(Decorator)
- 递归倒序输出链表
- 链表逆序
- 如何让菜单点击后不消失
- hdu 1717 小数化分数2
- mysql数据库的全量备份
- IO学霸
- 为图层上的N多怪物创建站立时的动画
- 21句经典语录