二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统

简介: 二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统

在现代软件开发中,通知系统是一个广泛应用的功能,用于实时向用户发送各种类型的通知,如短信、微信、邮件以及系统通知。然而,通知系统的需求通常是多变且动态的,因此需要一种灵活可扩展的设计模式来满足不同类型的通知需求。


在前面一篇文章中,我们介绍了什么是装饰器模式?以及装饰器模式的适用场景和技术点,并以简单的案例进行了说明,感兴趣的朋友请前往查看。


相信阅读了上一篇文章的朋友,就知道,装饰器模式即可完全满足上述的通知需求。


那么今天我们就介绍如何利用装饰器模式来构建一个高度可定制的通知系统,实现通知的动态组合和扩展。


一、关键技术点回顾

装饰器模式是一种结构型设计模式,允许在不改变现有对象结构的情况下,动态地添加功能。

在通知系统中,我们可以将各种通知类型(短信、微信、邮件、系统通知)视为组件,而装饰器则用于为这些组件添加额外的通知功能。


二、实现案例代码

下面是一个简化的通知系统的装饰器模式实现的示例代码:

// 抽象构件 - 通知接口
interface Notification {
    void send(String message);
}
// 具体构件 - 短信通知
class SMSNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("发送短信通知:" + message);
    }
}
// 具体构件 - 微信通知
class WeChatNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("发送微信通知:" + message);
    }
}
// 具体构件 - 邮件通知
class EmailNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("发送邮件通知:" + message);
    }
}
// 具体构件 - 系统通知
class SystemNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("发送系统通知:" + message);
    }
}
// 装饰器 - 抽象装饰器类
abstract class NotificationDecorator implements Notification {
    protected Notification notification;
    public NotificationDecorator(Notification notification) {
        this.notification = notification;
    }
    @Override
    public void send(String message) {
        notification.send(message);
    }
}
// 具体装饰器 - 短信通知装饰器
class SMSNotificationDecorator extends NotificationDecorator {
    public SMSNotificationDecorator(Notification notification) {
        super(notification);
    }
    @Override
    public void send(String message) {
        super.send(message);
        sendSMS(message);
    }
    private void sendSMS(String message) {
        System.out.println("额外发送短信通知:" + message);
    }
}
// 具体装饰器 - 微信通知装饰器
class WeChatNotificationDecorator extends NotificationDecorator {
    public WeChatNotificationDecorator(Notification notification) {
        super(notification);
    }
    @Override
    public void send(String message) {
        super.send(message);
        sendWeChat(message);
    }
    private void sendWeChat(String message) {
        System.out.println("额外发送微信通知:" + message);
    }
}


以下是客户端代码:

public class Client {
    public static void main(String[] args) {
        // 创建基础通知对象
        Notification notification = new SystemNotification();
        // 使用装饰器动态添加短信通知和微信通知
        notification = new SMSNotificationDecorator(notification);
        notification = new WeChatNotificationDecorator(notification);
        // 发送通知
        notification.send("您有新的消息,请注意查收!");
        // 输出:
        // 发送系统通知:您有新的消息,请注意查收!
        // 额外发送短信通知:您有新的消息,请注意查收!
        // 额外发送微信通知:您有新的消息,请注意查收!
    }
}


在以上代码中,我们首先创建了一个基础的通知对象,即SystemNotification

然后,通过装饰器模式,我们动态地为该通知对象添加了短信通知和微信通知功能,分别使用SMSNotificationDecoratorWeChatNotificationDecorator进行装饰。

最后,我们调用send方法发送通知,触发通知的发送。


三、总结

装饰器模式为通知系统提供了一种灵活可扩展的设计方案,使得我们能够动态地组合不同类型的通知并添加额外的功能,而无需修改现有代码。通过使用装饰器模式,我们可以轻松地扩展通知系统以满足不断变化的需求。


然而,装饰器模式并不仅限于通知系统。它在许多其他领域也有广泛的应用,如图形用户界面(GUI)的设计、输入输出流的处理等。通过理解装饰器模式的核心思想和实现方式,我们可以在实际的软件开发中更好地应用它,提高代码的灵活性和可维护性。


值得注意的是,装饰器模式还有许多其他的扩展和变体形式,例如使用透明装饰器、使用多个装饰器链等。这些扩展和变体可以根据具体需求进行选择和应用。


相关文章
|
12天前
|
监控 数据挖掘 BI
探索项目管理系统:解析五大功能,洞悉项目成功的关键
项目新手常忽视管理系统的价值,而高手已借助系统实现规划清晰。优秀的项目管理系统必备五大功能:项目WBS分解、图表报表、工时管理、团队协作和任务自动化。WBS能将复杂项目拆分成可管理任务,明确责任,评估时间和资源需求,便于跟踪进度。Zoho Projects作为示例,支持创建任务层级,利用甘特图和资源利用图监控进度和资源分配,工时管理则帮助控制项目时间和成本。同时,系统促进团队协作,如通过即时通讯和知识库增强团队凝聚力,而任务自动化则减少错误,提升效率。
18 1
|
1天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
14 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
1天前
|
监控 供应链 数据可视化
深度解析BPM系统:优化业务流程,提升组织效率
本文探讨了业务流程管理系统(BPM)的核心价值和功能,以及低代码如何优化流程管理。BPM通过自动化和标准化流程,提高效率,降低技术复杂性,促进协作和监控。低代码平台加速了开发进程,增强了流程自动化,使得非专业开发者也能构建应用程序。结合低代码,企业能更轻松地适应市场变化,实现流程简化和业务增长。
7 1
|
2天前
|
存储 SQL 自然语言处理
RAG技术全解析:打造下一代智能问答系统
一、RAG简介 大型语言模型(LLM)已经取得了显著的成功,尽管它们仍然面临重大的限制,特别是在特定领域或知识密集型任务中,尤其是在处理超出其训练数据或需要当前信息的查询时,常会产生“幻觉”现象。为了克服这些挑战,检索增强生成(RAG)通过从外部知识库检索相关文档chunk并进行语义相似度计算,增强了LLM的功能。通过引用外部知识,RAG有效地减少了生成事实不正确内容的问题。RAG目前是基于LLM系统中最受欢迎的架构,有许多产品基于RAG构建,使RAG成为推动聊天机器人发展和增强LLM在现实世界应用适用性的关键技术。 二、RAG架构 2.1 RAG实现过程 RAG在问答系统中的一个典型
34 2
|
2天前
|
供应链 监控 安全
全面剖析:新页ERP系统不为人知的一面,以及系统的工作流程解析!
全面剖析:新页ERP系统不为人知的一面,以及系统的工作流程解析!
|
2天前
|
新零售 供应链 搜索推荐
多人拼团新零售分销模式系统开发(解析)
新零售模式的推广和应用,必将对传统零售业产生深远影响
|
3天前
|
供应链 搜索推荐 API
API在电子商务中的应用与优势:深入解析
API是电子商务成功的关键,它们不仅促进了技术创新,还提高了用户体验和运营效率。随着技术的不断进步,API将继续在电子商务领域发挥更加重要的作用。电子商务平台通过利用API,可以更加灵活地适应市场变化,提供更加丰富和个性化的购物体验,最终实现业务的增长和扩展。
|
4天前
|
Linux 网络安全 数据库
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
|
4天前
|
Linux 开发工具 Android开发
移动应用与系统:开发与操作系统的深度解析
【5月更文挑战第6天】 在数字化时代,移动应用和操作系统是信息技术的核心组成部分。本文深入探讨了移动应用的开发过程、关键技术以及移动操作系统的架构和功能。通过对这些技术的详细分析,我们可以更好地理解移动应用和系统的工作原理,以及它们如何影响我们的生活和工作。
|
4天前
|
缓存 测试技术 Android开发
深入了解Appium:Capability 高级配置技巧解析
Appium 提供多种进阶配置项以优化自动化测试,如 deviceName 作为设备别名,udid 确保选择特定设备,newCommandTimeout 设置超时时间,PRINT_PAGE_SOURCE_ON_FIND_FAILURE 在错误时打印页面源,以及测试策略中的 noReset、shouldTerminateApp 和 forceAppLaunch 控制应用状态和重启。这些配置可提升测试效率和准确性。
15 2

推荐镜像

更多