说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现

简介:

为何要设计多功能消息组件

之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以通过配置进行一种消息的订制,如,你可以订制email,sms,rtx,qq等,但不能同时采用多种机制完成消息的发送,这在一些情况下是没有问题的,但有时,我们也需要同时为客户提供多种消息的推送,这在目前还是挺现时的,如在用户下单后,同时为它发email 和短信进行通过,并对每个订单的过程进行跟踪并通知给用户,这对于用户来说,体验非常不错!

多功能消息组件的组成

1 消息元件抽象 MessageComponent

2 默认的消息实现者DefaultMessage

3 装饰器抽象 Decorator

4 实现Email消息的装饰器 EmailDecorator

5 实现SMS消息的装饰器 SMSDecorator

下面将部分核心代码公开于世

using System;

namespace test
{
    /// <summary>
    /// 消息发送元件
    /// </summary>
    public abstract class MessageComponent
    {
        public abstract void Send (string message);
    }

    /// <summary>
    /// 默认实现消息发达,可以记录日志,订阅事件,实现默认的发送消息等功能
    /// </summary>
    public class DefaultMessage:MessageComponent
    {
        public override void Send (string message)
        {
            Console.WriteLine ("默认的消息发送机制");
        }

    }

    /// <summary>
    /// 对消息发送的装饰,如加个Email发送,SMS发送等
    /// </summary>
    public abstract class Decorator:MessageComponent
    {
        private MessageComponent _messageContaion;

        public Decorator (MessageComponent messageContaion)
        {
            _messageContaion = messageContaion;
        }

        public override void Send (string message)
        {

            if (_messageContaion != null)
                _messageContaion.Send (message);
        }
    }

    /// <summary>
    /// Email消息发送装饰器
    /// </summary>
    public class EmailDecorator:Decorator
    {
        public EmailDecorator () : this (null)
        {
        }

        public EmailDecorator (MessageComponent messageContaion) : base (messageContaion)
        {
        }

        public override void Send (string message)
        {
            base.Send (message);
            Console.WriteLine ("采用Email发送消息...");
        }

    }

    /// <summary>
    /// SMS消息发送装饰器
    /// </summary>
    public class SMSDecorator:Decorator
    {
        public SMSDecorator () : this (null)
        {
        }

        public SMSDecorator (MessageComponent messageContaion) : base (messageContaion)
        {
        }

        public override void Send (string message)
        {
            base.Send (message);
            Console.WriteLine ("采用SMS发送消息...");
        }

    }
}

调用代码如下:

         MessageComponent defaultMessage = new DefaultMessage ();
            Decorator emailDecorator = new EmailDecorator (defaultMessage);
            Decorator smsDecorator = new SMSDecorator (emailDecorator);//把emailDecorator添加到sms后,同时它集成了defaultMessage
            smsDecorator.Send ("仓储大叔消息组件...");

结果:

而如果只希望使用sms发送,那就是:

            Decorator smsDecorator = new SMSDecorator ();
            smsDecorator.Send ("仓储大叔消息组件...");

希望本文章可以给初学者带来收获,呵呵!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现,如需转载请自行联系原博主。

目录
相关文章
|
7月前
|
设计模式 缓存 安全
【设计模式】【结构型模式】装饰者模式(Decorator)
一、入门 什么是装饰者模式? 装饰者模式(Decorator Pattern)是 Java 中常用的结构型设计模式,它能在不修改原有对象结构的前提下,动态地为对象添加额外的职责。 为什么要装饰者模式?
162 8
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
133 0
|
9月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
10月前
|
设计模式 中间件 Java
设计模式3:代理、适配器、装饰器模式
代理模式是一种结构型设计模式,通过中间件解耦服务提供者和使用者,使使用者间接访问服务提供者,便于封装和控制。
172 3
|
12月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
12月前
|
设计模式 前端开发 JavaScript
前端必须掌握的设计模式——装饰器模式
装饰器模式是一种结构型设计模式,通过创建新类来包装原始对象,实现在不修改原有结构的前提下扩展新行为。其核心在于“组合”思想,使新功能可“即插即拔”。该模式具有解耦性、灵活性和动态性等特点,广泛应用于类的面向对象编程语言中,如JavaScript的注解和TypeScript的写法。示例中,通过装饰器模式为游戏角色动态添加装备,展示了其强大的扩展性和灵活性。
243 16
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
设计模式 Java
Java设计模式-装饰器模式(10)
Java设计模式-装饰器模式(10)
115 2
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
存储 算法 调度
iLogtail设计模式问题之如何确定定时任务框架的功能边界和目标
iLogtail设计模式问题之如何确定定时任务框架的功能边界和目标

热门文章

最新文章