装饰模式又名包装模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。举个例子,比如有一个车(Vehicle)对象, 现在提倡环保,车可以烧各种燃料,如电、天然气、柴油、汽油、氢气等,也可以烧几种燃料的组合,如果氢气和柴油,汽油和电等。如果这样使用继承,就会有很多的子类。这时可以使用装饰模式。
主要角色:
- 接口或者抽象基类:所有类的统一接口或父类
- 被装饰对象:被装饰者。
- 装饰角色:所有装饰类的父类。
- 具体装饰
采用继承类图:
采用装饰模式类图:
示例代码:
接口:
package com.dp.decorator;
public interface Vehicle {
public void run();
}
被装饰对象:
package com.dp.decorator;
public class ConcreteVehicle implements Vehicle{
@Override
public void run() {
System.out.print("我的动力系统是:");
}
}
装饰角色:
package com.dp.decorator;
public class Decorator implements Vehicle{
private Vehicle v;
public Decorator(Vehicle v) {
this.v= v;
}
@Override
public void run() {
v.run();
}
}
具体装角色(汽油):
package com.dp.decorator;
public class GasolineDecorator extends Decorator {
public GasolineDecorator (Vehicle v) {
super(v);
}
public void power(){
System.out.print("汽油");
}
public void run(){
super.run();
power();
}
}
具体装角色(柴油):
package com.dp.decorator;
public class DieselDecorator extends Decorator {
public DieselDecorator (Vehicle v) {
super(v);
}
public void power(){
System.out.print("柴油");
}
public void run(){
super.run();
power();
}
}
具体装角色(太阳能):
package com.dp.decorator;
public class SolarDecorator extends Decorator {
public SolarDecorator (Vehicle v) {
super(v);
}
public void power(){
System.out.print("太阳能");
}
public void run(){
super.run();
power();
}
}
客户端的调用:
package com.dp.decorator;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Vehicle v = new ConcreteVehicle();
Decorator d = new GasolineDecorator(v);
d.run();//汽油
Decorator d1 = new DieselDecorator (d);
d1.run();//汽油和柴油
Decorator d2 = new SolarDecorator(d1);
d2.run();//汽油、柴油和太阳能,超强哈哈哈..
}
}
装饰器模式的适用场合:
- 需要给一个类扩展功能,或给一个类增加附加责任
- 需要动态的给一个类增加功能,还可以动态的撤消
- 需要增加有一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
装饰器模式在java io种得到了充分的运用,例如java.io.FilterInputStream采用的就是一个装饰器模式,这个类本身是一个装饰器的抽象类(父类), 他有许多的子类,是具体的装饰器。类图:
事情就是这么个事情,情况就是这么个情况,不对之处,多多指教.......
- 大小: 26.4 KB
- 大小: 33.6 KB
- 大小: 45.4 KB
分享到:
相关推荐
设计模式C++学习之装饰模式(Decorator)
动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
C#设计模式之Decorator 装饰模式,pdf+视频教学,实例演示,易学易用~~
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...
学习java 装饰模式(decorator)非常好的例子
5、装饰模式(Decorator) 用意:动态地给一个对象增加其它职责,比继承实现灵活。
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
装饰器(Decorator)模式 详细教程,简明易懂,非常清晰的,附带有代码示例。
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第10节:结构型模式Decorator装饰模式
C#面向对象设计模式 Decorator 装饰模式 视频讲座下载
主要为大家详细介绍了.net设计模式之装饰模式Decorator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现 VS2012 下通过
装饰模式.doc 装饰模式.doc 装饰模式.doc
NULL 博文链接:https://chuanwang66.iteye.com/blog/1325151
NULL 博文链接:https://xiangtui.iteye.com/blog/1033790
主要介绍了Java设计模式之装饰模式(Decorator模式)介绍,本文讲解了为什么使用Decorator、如何使用装饰模式、Jive中的Decorator实现等内容,需要的朋友可以参考下
主要为大家详细介绍了C++设计模式之装饰模式Decorator的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
装饰模式的示例代码和文档,学习装饰模式的参考资料。
主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小伙伴们可以参考一下
C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) (Level 300)