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


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

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

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

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

    举例

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

    直播接口:

    /**
     * 直播接口
     */
    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();
        }
    }
    

    运行截图如下:

    运行截图

    可以看到增强了功能。

  • 相关阅读:
    死磕GMSSL通信-java/Netty系列(三)
    解决xinput1_3.dll丢失的终极方法!快来尝试这4个方法吧!
    java-php-python-ssm计算机office课程平台计算机毕业设计
    卷积运算与互相关运算
    OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标
    【操作系统】错题库
    Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
    30天Python入门(第二十一天:深入了解Python中的类和对象)
    那些年我踩过的坑,你踩中了几个
    python合集1
  • 原文地址:https://www.cnblogs.com/nicaicai/p/17818287.html