概述
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。可以简称为"修修补补"
适用性
- 1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
- 2.处理那些可以撤消的职责。
- 3.当不能采用生成子类的方法进行扩充时。
参与者
- 1.Component 定义一个对象接口,可以给这些对象动态地添加职责。
- 2.ConcreteComponent 定义一个对象,可以给这个对象添加一些职责。
- 3.Decorator 维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
- 4.ConcreteDecorator 向组件添加职责。
其基本类图如下图所示:
示例:
package com.sql9.structured;
abstract class Component {
public abstract void draw();
}
class ConcreteComponent extends Component {
private String name;
public ConcreteComponent(String name) {
this.name = name;
}
@Override
public void draw() {
System.out.println(String.format("ConcreteComponent - %s", name));
}
}
abstract class Decorator extends Component {
protected Component internalComponent;
public void setComponent(Component c) {
this.internalComponent = c;
}
@Override
public void draw() {
if (internalComponent != null) {
internalComponent.draw();
}
}
}
class ConcreteDecorator extends Decorator {
private String customName;
public ConcreteDecorator(String name) {
this.customName = name;
}
@Override
public void draw() {
extraDraw();
super.draw();
}
protected void extraDraw() {
System.out.println("Draw extra action in ConcreteDecorator...");
}
}
public class DecoratorTest {
public static void main(String[] args) {
ConcreteComponent c = new ConcreteComponent("This is the real component");
ConcreteDecorator d = new ConcreteDecorator("This is a decorator for the component");
d.setComponent(c);
d.draw();
}
}
结果:
Draw extra action in ConcreteDecorator...
ConcreteComponent - This is the real component
<script type="text/javascript"><!--
google_ad_client = "ca-pub-7104628658411459";
/* wide1 */
google_ad_slot = "8564482570";
google_ad_width = 728;
google_ad_height = 90;
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
分享到:
相关推荐
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
2 结构型模式 2.1 Bridge模式 2.2 Adapter模式 2.3 Decorator模式 2.4 Composite模式 2.5 Flyweight模式 2.6 Facade模式 2.7 Proxy模式 3 行为模式.....55 3.1 Template模式 3.2 Strategy模式 3.3 State模式 ...
4.4 Decorator(装饰)—对象结构型模式 115 4.5 FACADE(外观)—对象结构型模式 121 4.6 Flyweight(享元)—对象结构型模式 128 4.7 Proxy(代理)—对象结构型模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter ...
2 结构型模式.................................................................................................................................33 2.1 Bridge模式.............................................
C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) (Level 300)
C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第10节:结构型模式Decorator装饰模式
4.4 DECORATOR(装饰)——对象结构型模式 4.5 FACADE(外观)——对象结构型模式 4.6 FLYWEIGHT(享元)——对象结构型模式 4.7 PROXY(代理)——对象结构型模式 4.8 结构型模式的讨论 第五章 行为模式 5.1 CHAIN ...
本资源是用VC6.0实现的结构型设计模式,主要有BridgePattern、AdapterPattern、DecoratorPattern、CompositePattern、FlyweightPattern、FacadePattern、ProxyPattern六种模式,参考于《23种设计模式(C++).pdf》
2 结构型模式.................................................................................................................................26 2.1 Bridge模式............................................
NULL 博文链接:https://jacky-dai.iteye.com/blog/1132229
C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) C#面向对象设计...
软件设计模式,结构型模式:Adapter Bridge Composite Decorator Façade FlyWeight Proxy
4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 ...
设计模式面面观(12):装饰模式(Decorator Pattern)-结构型模式
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...
2 结构型模式.................................................................................................................................33 2.1 Bridge模式............................................
2.2.2 结构型 2.2.3 行为型 2.3 如何选择和运用设计模式 2.4 快速模式示例 2.4.1 根据设计原则进行重构 2.4.2 根据Adapter模式进行重构 2.4.3 利用企业模式 2.5 小结 第Ⅱ部分 剖析ASP.NET应用程序:学习...