装饰模式(decorator pattern):
装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,
是继承关系的一个替代方案。
装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。
装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。
装饰模式中的各个角色:
抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
(抽象)装饰(Decorator)角色:持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口。接口的实现方法值得注意,每一个实现的方法都委派给父类,但并不单纯地委派,而是有功能的增强。
by kyo:(抽象)装饰角色应不提供缺省的构造函数,以迫使子类调用其带参的构造函数并传入相应的具体组件对象。
具体装饰(Concrte Decorator)角色:负责给构件对象 “贴上” 附加的责任。每个具体装饰角色都实现规定的方法,在规定的方法中调用其父类的此方法并添加自己的附加代码。
装饰模式常常被称做包裹模式,就是因为每一个具体装饰类都将下一个具体装饰类或者具体构件类包裹起来。每一层包裹都提供了一些装的功能。(by kyo:怎么感觉和 AOP 的概念有点像...)
在以下情况下应当使用装饰模式:
1。需要扩展一个类的功能,或给一个类增加附加责任。
2。需要动态地给一个对象增加功能,这些功能可以再动态的撤销。
3。
需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
by kyo:装饰模式应该发尽量使用在无发生次序要求(无状态)的对象中。
使用装饰模式主要有以下优点:
1。装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。
装饰模式允许系统动态地决定“帖上”一个需要的“装饰”,或者除掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。
2。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。而继承关系则没有这个优势,每一种不同的排列组合均需要事先通过子类的继承方式设计好。
3。使用装饰模式,可以比使用继承关系需要较少数目的类。使设计比较易于进行。但另一方面,使用装饰模式会产生比使用继承关系更多的的对象,比较难以控制(装饰模式的动态性较强)。
使用装饰模式主要的缺点:
这种比继承方式更加灵活机动的特性,意味着装饰模式比继承更加易于出错。
适配器模式的用意是要改变所考虑的对象的接口而不一定改变对象的性能(特性),而装饰模式的用意是要保持接口,从而增强所考虑对象的性能(特性)。
分享到:
相关推荐
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
《设计模式之Decorator》 设计模式是软件工程中的一种最佳实践,它是在特定场景下解决常见问题的经验总结。Decorator模式是一种结构型设计模式,它的主要作用是为对象添加额外的功能,而无需修改对象的源代码。...
装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...
在给定的“设计模式 t07Decorator”主题中,我们聚焦于装饰者模式(Decorator Pattern)。装饰者模式是一种结构型设计模式,它允许我们在运行时给对象添加新的行为或职责,而无需修改其原有代码。这种模式遵循开闭...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
在给定的标题“设计模式之装饰模式”中,我们可以深入探讨以下几个方面: 1. **装饰模式的基本结构**:装饰模式通常包括四个角色:抽象组件(Component)接口,具体组件(Concrete Component)类,抽象装饰...
Java设计模式中的Builder模式和Decorator模式是两种重要的设计模式,它们在软件开发中起到优化代码结构、提高代码复用性和灵活性的作用。 1. 建造者模式(Builder) 建造者模式是一种创建型设计模式,它的主要目的...
装饰模式(Decorator)是软件设计模式中的一种结构型模式,其主要目的是在不改变对象原有类的基础上,通过添加新的行为或职责来扩展对象的功能。这种模式使得代码的扩展性非常优秀,避免了由于频繁地使用继承而导致...