装饰器模式(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
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
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