装饰器模式(Decorator Pattern)
半塘 2024/3/28 Java进阶
向一个现有的对象添加新的功能,同时又不改变其结构。本质就是包装一层,加属性加功能。
# 1、装饰器模式案例
华为手机只有打电话的功能,但我想给华为手机2加上发送短信的功能,但不改变原来的结构。
public interface Phone {
void call();
}
public class HuaweiPhone implements Phone{
@Override
public void call() {
System.out.println("华为打电话");
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
public abstract class DecoratorPhone implements Phone{
abstract public void sendMessage();
}
public class HuaweiPhone2 extends DecoratorPhone{
@Override
public void sendMessage() {
System.out.println("华为2发送短信");
}
@Override
public void call() {
System.out.println("华为2打电话");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ClientTest {
public static void main(String[] args) {
HuaweiPhone huawei = new HuaweiPhone();
huawei.call();
HuaweiPhone2 huawei2 = new HuaweiPhone2();
huawei2.call();
huawei2.sendMessage();
}
}
/**
* 输出结果:
* 华为打电话
* 华为2打电话
* 华为2发送短信
* /
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16