返回目录

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

之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以通过配置进行一种消息的订制,如,你可以订制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 ("仓储大叔消息组件...");

结果:

aaarticlea/png;base64,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" alt="" />

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

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

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARwAAAA9CAIAAADwEUGQAAAJoElEQVR4nO2b+VOURxrH+TXGZNVgNsHEKCBRQWa8QLkRPMIhXnhAJOhqIh4oYBI8uBSRQwUPUMFVg7KVlLWp3dqtrdoqqOK3jUeqQlX+hGSwKisCAzPvEEznh+edpnmPfnuGlyPD861vUf0+b3dPv9Cfed7u98Xvxx++Q6PRJtqPoFAoU+U36Vij0T5mhAqNNtkyVDOCD4/Rry86/PqiI+CZIUdmhhydGXJ05odH35B97I3Fx94EL8n/E/XS47PAocdnhR6fHXpiduiJ2WEnZoedmBNWMGdZwZxlBW+BwwvfCi/0Dy/0txT6W4r8LUVzLUVzrUVzrSfnWk++bT359nLw539eIfudFV+8s1L2u6u+eHfVl+CA1V8GrC4OWF0cEFE8L6J4XsSpeRGn3ot0e83p96nXnpkPjjozP+rsB+Doswuizy6ILlkQXbIgpmRhTMnCmNKFsaULY0sDwXFlgXFlQXFlQfFlQfHlQfHlwfHlwQnlwQkVixIqFiXKDkk8F7JO9odJ56kXJ59fnFy5OLlyyXrwhSXrLyzdAK5aurEqlHrTxTC3l31ULTulOjylOjylJjylJjy1xpJaY0mttaTVWtJqrWm11rQ6a3qdNb1ueXrd8s11yzdfWgHOuLQi4/LKjMsrt4CvrNpyZdVW2au31YMjttVHbG8AR25viNzRELnjauSOq2sywdfWZF5buxN8PWrXiKN335C950bMnkbZWY2xWY2xWU2x2U2x2U1x2U1x2TfjPr4ZD957K37vrQRwzq2EnNuJObcTPwE3r/ukeV1u87rc5qTc5qTclqR9LUn7WpL3tSTvvwNev//O+r/8FbzhAPjuxgN3Nx4E39v0KfX9jz5z+9D9lENfyc77KjWvNTWvNfVwa5rsB2lHHqTLfph+9OFm8LG2zcfaMsD5bQgVQoVQjSdUFZXVgt6YeXpGcB5ChVAhVAZQ/e/xU00/fvLsybPvHz/9/rsnzyBSUVk9I/AgQoVQIVQGUDlcvwq6orL6Na+ggj3HyYIKPh2h4kMFvyVfggquaHKgGh4ebu/oyix9tOvcN3sufp19uS3nemu3zeaSnNQxh++7JKcCKsU+vUdQ0VazQkfKEwwVxNVQ0fHwoYI6IlBBzT8cVIq/rw9Apbgir6GC5jyoXg0Pt3d05Tf+u6D5X0X3/vH5w2+Lv3lkCBX0C5nKC6hmubmiUE18ptKD6v21Z0SgGo9MBZ/rNVTQ3MRMJeNEC1MDKhiMd5kKgps+vTeKK9MzVf+Ao72jq6ztvxnVLSm119Ib6rc21QFUkuSUnA6X5Nx6s44DleL2D04p1lSjuJpYqBiuNKCSuZr2UI1w5StQbTggczUJUNkHHO0dXZuqbqRevppx/cq2W7WZd6u6bTZJkmimyvtPvjhUmhsVglCR0aJQ0QhABeV+u5PGgShFcw5UhJBfXtjVULHN50edUXRIoaIRCpWiJoWKRlioFJUBKjYCUEHZPiDROIWKRihUbHMWKhoEqOQ+B0f69AIq2paFih1A1K7rUHANDdNgzJ5GxYWzUNEgQKWoSaFigxQqRWVDqEBAFJQHHC4ap1DRCAsVDbJQEfqakgzVoLO9oyu9vmFL46XtzTW77ldmtZV322xDLom9AxwjVG8uyYcmIlApMhUE/S0yS5Cp6LWxmQoimrt/cIoPFRyymYoQ8tPzl/QnAa501lQQCYqXC5w1FUREMhW9TDZTQYSixclUELGmySxBpqJ9qnf/IM6HCsqRO65CAaCC8tqdMkuQqQghrqHh6N03IAhQPf+ln/4khABUUI53o5XAcJWYc1su6GcqiGju/sEpdaZiNyroL4TNVBBJc6PFWVPBoQZUW2/WZd65uLv1/Md/K819dKrbZnM5HRMP1ZywAnqFCqioKFT9dqf69o9WM4SK1QRDxSYrQ6jsA5L69o8dvBdQ2QclzS11qDYWqNjbP+IhVFSeQpW8/w5t6x1UAw6X4vYPao4Jqp33LmQ9rNj79dl9fy8+8M+T3TbbU7ckp7Ovr7f3ZY/XGxUeQQVrKggqMhW7piI6UMGaCpoYZqr3It3bFRMOFayp4JSnUEG1sWSqqQmVYk0FQUGowHBq8qEadEitD75t7+hizUI1ODDQ09PT8+IFZ0vdcKMCHv7CKfqcijanz6nIaKnXVIQQuqYCqW//qBQPfyEY4E5TLFSEEPWaCqQJFVtBsab6+XkvLbNrKkIIf00FW+o0SNdUIE6mIoTQLXUa4a+pQJoPf+EUf0udBjlrKtioICppQsWuqQgh7Jrq+f/ttEy31GmEv6aCh78QVGypU6jYoGKjgsYNt9SJAqqX/U7yykXI0LBrkLySCHlFyNBvvzokp8PpcNjt/b19vX19vfb+Pq8f/uIbFVP/4S++UWHmc6rTJec13/Srqrl0sbb+HBPZsK0QX1NCqKYtVGxOM3pLPejQa4EHRTwj8CC+UItQTVuo8F8/ECqECqFCqBAqH4AKjUabZRmqchQKZZJGoEpAoVBmaBRUfkbq7Ow0rDNZ8mhs6sqCzcU/ZSr/rlDjKxGoOkeLf1at8Rs827leWS/IP9TrUF0wHBhq2kkNladUeDpZTRQHJEOuDCHUrMOHalK+WVBTTvxMJTIbJgsqESo0m4hPfT2oRCAUiaN8U5pQefSN7hFUmjOYc8if8YbSumLe4DlBw1P8IRmOBOU70stUnVr3OXpTUHBmq2lR9KBZVtfXHIPY5Yo27NT/LuBwItgbysdlCBUnohnnHBpCpZiyglAZTlkOCYZ90pGINNS8EM7IUb4pw90/kSkreMj5gjeEij8AwXnMdivYylOo9EZoeBUo35ECKv6E05x5nh5q9sDOXbYChxC2f68nPX+6q4fBwU+vGn/8KB+U4e6f4Zzg0sebfIKHmhH2lKKgecipw7k6vc4F+zeMo3xTHKg6R2cPvR74s1mPFr0ye8ipo9m53hgMx6bJML9DQ04QpOkr8d0/T2eq+nBcoaKHgvzzh605coXG+BF6/XgaR005/aGfUxkORu+sSG/8C9e7TM1WemcRKt+U5mtKbAWPDkUqmCIOUXqfyD/L/wjvoBI8i/I1sVAJJgRFJtGr7+kkHos4uU4xKj/mK19Tek0UZQ5y/G5Rvq+xPKcynCvjPZn4U9bE2cxBFIVSyqP/p0KhUMZCqFAok4VQoVAmC6FCoUwWQoVCmSyECoUyWQgVCmWyECoUymQhVCiUyUKoUCiThVChUCYLoUKhTBZChUKZLIQKhTJZCBUKZbIQKhTKZCFUKJTJQqhQKJOFUKFQJguhQqHM1e8pe38xJ+EP8AAAAABJRU5ErkJggg==" alt="" />

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

返回目录

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

  1. 说说设计模式~装饰器模式(Decorator)

    返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...

  2. 设计模式(八)装饰器模式Decorator(结构型)

    设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...

  3. 【PHP设计模式 09_ZhuangShiQi.php】装饰器模式 (decorator)

    <?php /** * [装饰器模式 (decorator)] * 有时候发布一篇文章需要经过很多人手,层层处理 */ header("Content-type: text/html; ...

  4. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  5. 装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  6. 装饰器模式 Decorator 结构型 设计模式 (十)

    引子           现实世界的装饰器模式 大家应该都吃过手抓饼,本文装饰器模式以手抓饼为模型展开简介 "老板,来一个手抓饼,  加个培根,  加个鸡蛋,多少钱?" 这句话会不 ...

  7. 设计模式学习心得&lt;装饰器模式 Decorator&gt;

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装 ...

  8. 23种设计模式之装饰器模式(Decorator Pattern)

    装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包 ...

  9. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

随机推荐

  1. 2015 ACM Syrian Collegiate Programming Contest

    A. My Friend of Misery 计算出答案的上下界即可. 时间复杂度$O(n)$. #include<bits/stdc++.h> using namespace std; ...

  2. 【Cocos2d入门教程一】Cocos2d-x环境搭建

    在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Coc ...

  3. FZU2232 炉石传说 最大匹配

    思路:正好是二分图,自己敌人,符合条件的随从二人组建边,最大匹配为n是符合要求 #include <cstdio> #include <cstring> #include &l ...

  4. EntityFramework动态组合多排序字段

    前言:在使用EF当中,肯定会遇到动态查询的需求,建立一个公共调用的动态组合表达式查询也是必不可少的,以下是建立动态组合多排序字段做个记录,供以后调用 1.建立一个结构,用于多个排序字段组合,这个结构体 ...

  5. File类与FileInfo类

    File是一个静态类,常用于文件操作,读取,修改文件等等.File类的大部分方法最终都是转换为流(Stream)的操作,只不过是.net提取帮你封装好了这些常用的流.并且会自动清理占用的资源. 例如: ...

  6. 最新Oracle 和 mysql 的对比参照----开发篇(转)

    Oracle mysql 对比版本 Release 10.2.0.1.0 XE  windowsXP 5.0.45-community-nt-log MySQL Community Edition ( ...

  7. AWS专线服务总结和疑问

    1.AWS专线服务的入口, 从介绍页上可以看到,有如下功能: (1)专线可以连接AWS云主机和传统的数据中心或者分支机构. (2)专线可以连接AWS云主机和托管区的主机. 连接要素: (1)需要使用V ...

  8. 在Mac上 python中使用tesseract OCR (Pytesser) 识别图片中的文字

    仓库地址:https://github.com/RobinDavid/Pytesser brew install tesseract sudo pip install opencv-python 安装 ...

  9. .Net版本依赖之坑引发的搜查

    前言 今天上午,一个客户反馈XX消息没有推送到第三方链接.于是我查看了推送日志列表,并没有今天的.接着登录服务器查询文件日志,看到了记录.我们的代码步骤是消息先推送到消息队列,消费消息队列时,记录文件 ...

  10. 01-python基础

    前几天, 觉得python简单的不行, 没有仔细做笔记, 然后今天翻了下前几天看的东西, 还是记下来吧 对于python2.7 和 python3 , 建议使用python3 的模式编程, 然后使用p ...