0%

装饰模式

描述

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例

和适配器模式中的对象适配相比:

  • 相同:都是持有一个类对象;
  • 不同:装饰器模式需要装饰对象和被装饰对象实现同一个接口;

适用

需要一个扩展类;

动态的为一个对象增加功能,而且还能动态撤销,(继承不能做到这一点,继承的功能是静态的)

问题

会产生过多相似的对象,不易排错

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//接口
interface Source {
public void name();
}
//实现类
class Animal implements Source {
@Override
public void name(){
Test.printMsg("Animal.name");
};
}
// 装饰类
class Decorator implements Source {
private Source source;
public Decorator(Source source){
super();
this.source = source;
}
@Override
public void name(){
Test.printMsg("in Decorator.name");
source.name();
Test.printMsg("out Decorator.name");
}
}
//测试
public class Test {
public static void printMsg(String msg){
System.out.println(msg);
}
public static void main(String[] args){
Source source = new Animal();
Source obj = new Decorator(source);
obj.name();
}
}