设计模式—结构型模式之装饰器模式

设计模式—结构型模式之装饰器模式

适配器是连接两个类,可以增强一个类,装饰器是增强一个类。

向一个现有的对象添加新的功能,同时又不改变其结构。属于对象结构型模式。

创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

举例

比如我们有一个直播平台,提供了直播功能,但是如果不进行美颜,可能就比较冷清。所以美颜功能就是我们的增强,可以用装饰器来实现。

直播接口:

/**
 * 直播接口
 */
public interface LiveBroadCastInterface {
    void liveBroadcast();
}

直播类:

/**
 * 实现直播接口
 */
public class SjdwzLiveBroadCast implements LiveBroadCastInterface{
    @Override
    public void liveBroadcast() {
        System.out.println("我来直播了......");
    }
}

如果没有美颜,可能就会比较冷清;所以我们可以提供一个装饰器,来为我们的直播进行增强。

直播装饰器接口:

/**
 * 直播平台增强
 */
public interface LiveBroadCastDecoratorInterface extends LiveBroadCastInterface{
    void enhance();
}

美颜装饰器如下:

/**
 * 美颜功能装饰器
 */
public class BeautyLiveBroadCastDecorator implements LiveBroadCastDecoratorInterface{

    private LiveBroadCastInterface liveBroadcast;

    public BeautyLiveBroadCastDecorator(LiveBroadCastInterface liveBroadcast) {
        this.liveBroadcast = liveBroadcast;
    }

    /**
     * 增强的功能
     */
    @Override
    public void enhance() {
        System.out.println("增加了美颜功能");
    }

    @Override
    public void liveBroadcast() {
        //对功能进行增强
        this.enhance();
        //还得要进行原功能
        this.liveBroadcast.liveBroadcast();
    }
}

测试类如下:

public class DecoratorTest {
    public static void main(String[] args) {
        SjdwzLiveBroadCast sjdwzLiveBroadCast = new SjdwzLiveBroadCast();
        //不增强的话
        sjdwzLiveBroadCast.liveBroadcast();

        System.out.println("============增强功能===============");
        //装饰器
        BeautyLiveBroadCastDecorator beautyLiveBroadCastDecorator = new BeautyLiveBroadCastDecorator(sjdwzLiveBroadCast);
        //增强的功能
        beautyLiveBroadCastDecorator.liveBroadcast();
    }
}

运行截图如下:

运行截图

可以看到增强了功能。

posted on   随机的未知  阅读(36)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示