说说设计模式~装饰器模式(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)~多功能消息组件的实现,如需转载请自行联系原博主。

目录
相关文章
|
4月前
|
设计模式 存储 缓存
聊聊Java设计模式-装饰器模式
装饰器模式允许向一个现有的对象添加新的功能,同时不改变其结果。比如Java 中的IO框架中,`FileInputStream`(处理文件)、`ByteArrayInputStream`(处理字节数组)、`BufferedInputStream`(带缓存的处理类)等就是对`InputStream`进行的功能扩展,这就是装饰器模式的典型应用。
25 1
聊聊Java设计模式-装饰器模式
|
4月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
40 2
|
2月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
35 0
|
16天前
|
设计模式 前端开发 API
React的高阶组件(HOC):使用与设计模式探讨
【4月更文挑战第25天】React的高阶组件(HOC)是一种复用和增强组件的高级模式,它接受组件并返回新组件。非侵入式增强使得HOC能在不修改原有组件代码的情况下添加功能。定义HOC后,将其应用于目标组件并渲染增强后的组件。常见设计模式包括属性代理、控制反转和装饰器。然而,使用时要注意避免滥用,保持命名清晰,关注性能优化。理解并恰当使用HOC能提升React应用的构建效率。
|
2月前
|
设计模式 Java
设计模式之装饰器模式
设计模式之装饰器模式
|
2月前
|
设计模式
装饰器模式--设计模式
装饰器模式--设计模式
18 0
|
4月前
|
设计模式 Java uml
设计模式-装饰器模式
设计模式-装饰器模式
23 0
|
4月前
|
设计模式
结构型设计模式:装饰器模式
结构型设计模式:装饰器模式
24 0
|
1月前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
22 0
|
2月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
54 0