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
分享到:
相关推荐
这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...
c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
桥接模式之消息发送、适配器模式之购物车商品推荐、装饰者模式之相亲(男人的描述)、组合模式之对购物网站、享元模式之网店模板
JAVA-设计模式-结构型模式-装饰模式
该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。 1.1 设计模式要求 在软件的设计中请使用到三种以上设计模式。 1.2 画图基本要求 能实现基本图形的绘制功能,包括实现...
设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...
2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
设计模式_结构型_装饰者模式
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
3.装饰者模式:这是一个关于相亲的故事。某家有女初长成,七大姑八大姨欲帮忙寻得佳婿,后在各种群、圈、网站,收集了各种男人的资料。这里需要一个应用程序生成收集过来的男人的描述,如..........4.组合模式:用...
设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
java设计模式示例 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 行为型...
五、 透明式的合成模式结构 93 六、 透明式的合成模式实现 94 七、 使用合成模式时考虑的几个问题 97 八、 和尚的故事 98 九、 一个实际应用Composite模式的例子 98 C#设计模式(12)-Decorator Pattern 101 一、 ...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
桥接模式之消息发送、适配器模式之购物车商品推荐、装饰者模式之相亲(男人的描述)、组合模式之对购物网站、享元模式之网店模板
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...