个人博客

http://www.milovetingting.cn

装饰模式

模式介绍

装饰模式也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。

模式定义

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式生成子类更为灵活。

使用场景

需要透明且动态地扩展类的功能时。

简单使用

定义Component

1
2
3
4
5
public abstract class Component {

public abstract void operate();

}

定义具体的Component

1
2
3
4
5
6
7
8
public class ConcreteComponent extends Component {

@Override
public void operate() {
System.out.println("ConcreteComponent operate");
}

}

定义Decorator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public abstract class Decorator extends Component {

private Component component;

public Decorator(Component component) {
super();
this.component = component;
}

@Override
public void operate() {
component.operate();
}

}

定义具体的Decorator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ConcreteDecorator extends Decorator {

public ConcreteDecorator(Component component) {
super(component);
}

@Override
public void operate() {
operateA();
super.operate();
operateB();
}

public void operateA() {
System.out.println("operateA");
}

public void operateB() {
System.out.println("operateB");
}

}

调用

1
2
3
4
5
6
7
8
9
public class Main {

public static void main(String[] args) {
Component component = new ConcreteComponent();
Decorator decorator = new ConcreteDecorator(component);
decorator.operate();
}

}

输出结果

1
2
3
operateA
ConcreteComponent operate
operateB