1,UML图
抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。
2, 模式说明
装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类。
装饰模式的关键在于这种扩展是完全透明的。装饰模式常常被称做包裹模式,就是
因为每一个具体装饰类都将下一个具体装饰类或者具体构件类包裹起来。
3,模式示例代码
package com.maohao.struct.decorator;
public interface Component {
void sampleOperation();
}
package com.maohao.struct.decorator;
public class ConcreteComponent implements Component {
/**
* 构造子
*/
public ConcreteComponent() {
//
}
/**
* 商业方法
*/
@Override
public void sampleOperation() {
//
}
}
package com.maohao.struct.decorator;
public class Decorator implements Component {
private Component component;
/**
* 构造子
*/
public Decorator() {
//
}
/**
* 构造子
*/
public Decorator(Component component) {
this.component = component;
}
@Override
public void sampleOperation() {
component.sampleOperation();
}
}
package com.maohao.struct.decorator;
public class ConcreteDecorator extends Decorator {
/**
* 商业方法
*/
public void sampleOperation() {
super.sampleOperation();
}
}
4,什么情况下使用
(1)需要扩展一个类的功能,或给一个类增加附加责任;
(2)需要动态地给一个对象增加功能,这些功能可以再动态地撤销;
(3)需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系
变得不现实。
5,模式的优缺点
优点:(1)装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供
比继承更多的灵活性;
(2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出
很多不同行为的组合;
(3)这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错。
6,与其他模式比较
与适配器模式:适配器模式的用意是要改变所考虑的对象的接口而不一定改变对象的性能,而装饰模式的用意是要保持接口,从而增强所考虑对象的性能。
与策略模式:装饰模式将一个东西的表皮换掉,而保持它的内心。策略模式恰好相反,它在保持接口不变的情况下,使具体算法可以互换;装饰模式的实现要求Component尽量地“轻”,而策略模式要求抽象策略类尽量的“重”。
与合成模式:装饰模式常常用在合成模式的行为扩展上。使用继承关系扩展合成模式的行为很困难。如果仅仅对抽象构件(Component)类还是合成类(Composite)类或者树叶(Leaf)类使用继承办法,都会导致多态性被破坏。
7,模式应用
Java IO库中大量使用了装饰模式
- 大小: 29.5 KB
分享到:
相关推荐
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
在本文中,我们将深入探讨结构型设计模式,特别是桥接模式、适配器模式、装饰者模式和组合模式,以及它们在实际场景中的应用。 1. **桥接模式**: 桥接模式将抽象部分与实现部分分离,使得它们可以独立进行变化。...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式是一种设计模式,它是结构型模式的一种,用于在运行时动态地给对象添加新的行为或职责。这种模式允许我们独立于对象的类来扩展其功能,而不必修改原有代码,实现了对对象的透明增强。装饰模式的核心在于,它...
在IT行业中,软件体系结构设计模式是开发高质量、可维护和可扩展的软件系统的关键要素。设计模式是一种在特定上下文中解决常见问题的最佳实践,它为软件设计提供了可重用的解决方案。本作业将深入探讨软件体系结构...
这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
在软件开发领域,设计模式和体系结构是至关重要的概念,它们是解决常见问题的模板,为软件的可扩展性、可维护性和可重用性提供了基础。本资源"软件设计模式与体系结构课后习题代码(孙玉山).zip"包含了孙玉山教授讲解...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
《软件设计模式与体系结构》是软件开发领域中的核心理论之一,它关乎到软件的可维护性、可扩展性和灵活性。这份压缩包“软件设计模式与体系结构(期末复习1).rar”包含了对这一主题的复习资料,特别是对于期末考试...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...
在软件开发领域,设计模式和体系结构是至关重要的概念,它们是构建可扩展、可维护且高效软件系统的基础。设计模式是一种在特定情况下解决常见问题的标准化解决方案,而体系结构则是软件系统的整体构造和组织方式。这...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
孙云山老师的“软件设计模式与体系结构”课程深入探讨了这些模式及其在构建复杂系统中的应用。本资料集合包含了课后习题的第234章答案,这将有助于学生深化对设计模式的理解,并提升其实际应用能力。 设计模式是...
装饰模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或责任,而无需修改对象的源代码。在Java中,装饰模式通常通过继承和组合来实现,提供了比子类化更灵活的方式来扩展对象的功能。 装饰模式的核心...