一、装饰模式的定义:
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
二、装饰模式的特点;
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。
三、装饰模式 VS 继承
装饰模式 | 用来扩展特定对象的功能 | 不需要子类 | 动态地 | 运行时分配职责 | 防止由于子类导致的复杂和混乱 | 更多的灵活性 | 对于一个给定的对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象发送消息。 |
继承 | 用来扩展一类对象的功能 | 需要子类 | 静态地 | 编译时分派职责 | 导致很多子类产生,在一些场合,报漏类的层次 | 缺乏灵活性 | 对于所有可能的联合,客户期望很容易增加任何的 困难 |
四、实例:人吃饭。
参与者:
1.Component:定义一个对象接口,可以给这些对象动态地添加职责(吃饭)。public interface Person {
void eat();
}
2.ConcreteComponent:定义一个对象,可以给这个对象添加一些职责(男人吃饭)。public class Man implements Person {
public void eat() {
System.out.println("男人在吃饭");
}
3.Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。public abstract class Decorator implements Person {
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
public void eat() {
person.eat();
}
}
4.ConcreteDecorator 向组件添加职责(reEat)。public class ManDecoratorA extends Decorator {
public void eat() {
super.eat();
reEat();
System.out.println("ManDecoratorA类");
}
public void reEat() {
System.out.println("再吃一顿饭");
}
public class ManDecoratorB extends Decorator {
public void eat() {
super.eat();
System.out.println("===============");
System.out.println("ManDecoratorB类");
}
}
test 测试类:public class Test {
public static void main(String[] args) {
Man man = new Man();
ManDecoratorA md1 = new ManDecoratorA();
ManDecoratorB md2 = new ManDecoratorB();
md1.setPerson(man);
md2.setPerson(md1);
md2.eat();
}
}
result 测试结果:
男人在吃
再吃一顿饭
ManDecoratorA类
===============
ManDecoratorB类
参考资料:http://www.blogjava.net/chenweicai/archive/2007/03/23/105860.html
分享到:
相关推荐
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象语言中,装饰者模式通常通过继承实现,但与传统的继承方式不同,装饰者模式可以提供一种更...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...
装饰模式是一种设计模式,它是结构型模式的一种,用于在运行时动态地给对象添加新的功能,而无需修改对象的原有代码。这种模式的核心思想是通过将对象包装在另一个对象中来扩展其行为,同时保持接口不变,使得客户端...
《JAVA设计模式(中文).chm》是一部专为Java开发者准备的设计模式指南,它深入浅出地阐述了软件工程中的重要概念——设计模式。设计模式是解决常见编程问题的成熟解决方案,是经验丰富的开发者们在实践中总结出的最佳...
本篇文章将深入探讨Java设计模式中的核心概念,并结合提供的两个压缩包文件——"Java设计模式(英文).zip"和"Java设计模式配套例题.zip",来解析其中蕴含的关键知识点。 设计模式分为三大类:创建型模式、结构型模式...
装饰模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或责任,而无需修改原有代码。这种模式在软件工程中极为重要,因为它遵循了开闭原则——对扩展开放,对修改关闭。在Java中,装饰模式通常通过继承和...
装饰模式是一种结构型设计模式,它允许在不改变对象本身的基础上,在运行时为对象添加新的功能。这种模式常被用于给对象动态地增加职责,尤其是当需要为对象添加多个职责时,比继承更加灵活且避免了类的爆炸性增长。...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之...
**Java设计模式——入门** 设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。Java设计模式是面向对象编程中的一个重要概念,可以帮助开发者编写可复用、可维护、易于理解的代码。这...
结构型模式如代理模式(Proxy)、装饰器模式(Decorator)和适配器模式(Adapter),则关注如何组合或连接类和对象。行为型模式,如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of ...
装饰模式是一种结构型设计模式,它允许动态地给一个对象添加新的行为或职责,而不必修改原有类的代码。装饰模式通常由四个角色组成:Component(组件),ConcreteComponent(具体组件),Decorator(装饰器),和...
《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
《设计模式与JAVA》这本书是面向Java开发者的一本经典教程,它深入浅出地介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的软件开发人员在解决常见问题时所形成的可重用解决方案,它们是经过时间考验的...
### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...
第4章GoF-StructuralDesignPatterns结构型设计模式 95 4.1AdapterPattern(适配器模式) 96 4.1.1定义 96 4.1.2现实中的实例——电脑电源适配器 97 4.1.3C#实例——化学数据银行 98 4.1.4Java实例——清洁系统 ...