• 【24种设计模式】装饰器模式(Decorator Pattern(Wrapper))


    装饰器模式

    装饰器模式是一种结构型设计模式,用于动态地给对象添加额外的行为或责任,而不需要改变原始对象的结构。通过创建一个包装器类(装饰器),它包含原始对象的引用,并提供与原始对象相同的接口,可以在运行时灵活地添加、修改或移除原始对象的功能。

    以下是一个简单的装饰器模式的示例:

    // 定义一个接口,表示组件(Component)
    public interface Message {
        void send();
    }
    
    // 实现 Component 接口的具体组件类(ConcreteComponent)
    public class EmailMessage implements Message {
        @Override
        public void send() {
            System.out.println("Sending email message");
        }
    }
    
    // 创建一个抽象装饰器类(Decorator),实现 Component 接口
    public abstract class MessageDecorator implements Message {
        protected Message decoratedMessage;
    
        public MessageDecorator(Message decoratedMessage) {
            this.decoratedMessage = decoratedMessage;
        }
    
        @Override
        public void send() {
            decoratedMessage.send();
        }
    }
    
    // 具体装饰器类(ConcreteDecorator),扩展装饰器功能
    public class SecureMessageDecorator extends MessageDecorator {
        public SecureMessageDecorator(Message decoratedMessage) {
            super(decoratedMessage);
        }
    
        @Override
        public void send() {
            encryptMessage();
            super.send();
        }
    
        private void encryptMessage() {
            System.out.println("Encrypting message");
        }
    }
    
    // 使用示例
    public class Main {
        public static void main(String[] args) {
            // 创建具体组件对象
            Message emailMessage = new EmailMessage();
    
            // 创建装饰器对象,将具体组件对象传入
            Message secureEmailMessage = new SecureMessageDecorator(emailMessage);
    
            // 调用装饰后的方法
            secureEmailMessage.send();
        }
    }
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    在上述示例中,Message 是一个表示消息发送的接口,EmailMessage 是实现了 Message 接口的具体组件类。MessageDecorator 是抽象装饰器类,它也实现了 Message 接口,并持有一个 Message 类型的引用。SecureMessageDecorator 是具体装饰器类,它扩展了装饰器的功能,包括对消息的加密操作。

    通过使用装饰器模式,我们可以动态地向需要发送的消息添加额外的加密行为,而不需要修改原始的消息发送逻辑。在示例中,secureEmailMessage 是对 emailMessage 的装饰,通过调用 send() 方法,会先进行加密操作,然后再发送邮件。这样我们可以在运行时根据需要添加或者移除装饰器,以达到动态地增加功能的效果。

  • 相关阅读:
    OAK PoE设备独立模式详细介绍
    金仓数据库 KingbaseES与Oracle的兼容性说明(2. 数据类型)
    Coordinatorlayout:协调员布局
    ThreadLocal在接口参数间传递中的使用
    OpenCV基础(二):绘制直线、绘制几何图形、绘制文字、创建窗口
    毕业3年...设计行业一事无成,北漂闯荡转行成功
    正点原子lwIP学习笔记——Socket接口UDP实验
    本地生活服务平台有哪些?哪个靠谱?
    作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
    硬核,腾讯内部整理的面向开发人员代码安全指南,适合所有程序员
  • 原文地址:https://blog.csdn.net/Bankcary/article/details/132705715