装饰(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))); } }
运行结果:
有了口红,哇塞,狐狸精一个!
刷睫毛了,更漂亮了一些。
画眉了,漂亮了一些。
开始我是素颜。
通过上面例子我们可以看到,装饰模式在于在原有的功能上添加新的职责。装饰模式能够提供比继承更灵活的对象扩展能力,但是也往往由于这种灵活性会是系统调用变的复杂。
ps:最近重新学习设计模式,所写相关笔记纯属个人对书本和资料的理解,如有不到之处请大家指出,共同探讨学习设计模式。
设计模式系列目录:
相关推荐
以上只是部分Java设计模式的介绍,实际的“DesignPatterns”压缩包可能包含了这些模式的源代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用设计模式,提升代码质量。同时,结合博主提供的博客链接,...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...
通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...
《Java与模式——源码》这个主题涉及到的是Java编程语言中的设计模式应用,以及如何通过源代码来理解和学习这些模式。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更易读、易维护、...
比如,Mocha.java、Whip.java和Soy.java可能是具体的装饰器,分别表示添加摩卡、奶油或豆奶到饮料中。 在实际应用中,装饰模式的使用流程大致如下: 1. 客户端创建一个Concrete Component对象。 2. 客户端可以将该...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
"大牛解读Java设计模式.pdf"这本书籍,作为这个主题的载体,很可能是由资深专家撰写,用生动的语言和实例帮助读者理解抽象的设计概念,从而提升他们的编程技能。无论你是初学者还是有经验的开发者,都能从中受益匪浅...
根据提供的标题、描述以及部分内容,本文将深入探讨Java设计模式,并着重分析23种常见的设计模式,以帮助Java程序员更好地理解和应用这些模式。 ### Java设计模式概述 Java设计模式是面向对象软件设计的一种通用可...
《Java与模式》是闫宏大师的一部经典之作,它将古老的哲学智慧——道德经的智慧,巧妙地融入到现代编程语言Java的设计模式之中。这本书不仅深入浅出地讲解了23种经典的设计模式,还提供了丰富的实践案例,旨在帮助...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
在这个实验报告中,主要讨论了三种设计模式——策略模式、装饰模式和工厂模式的综合运用,以解决一个国际电子商务系统的订单处理问题。 1. **策略模式**: 策略模式的核心在于将算法族封装在独立的可互换的策略类...
### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...
8. **设计模式**:了解并能应用常见的设计模式,如单例、工厂、观察者、装饰器等,能提高代码的可维护性和复用性。 9. **垃圾回收与内存管理**:理解JVM的工作原理,包括内存区域划分、垃圾回收机制、性能调优等,...
### Java设计模式(1)——理解与应用 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定问题或情境而形成的最佳实践集合。这些模式可以帮助开发者更高效地解决常见问题,提高代码的可重用性和可...
在Java编程中,设计模式被广泛应用于构建大型、复杂系统,以确保代码的高效性和灵活性。以下是《Head First设计模式》中涵盖的一些主要设计模式及其要点: 1. **工厂模式**:提供一个创建对象的接口,使代码可以...