说说设计模式~装饰器模式(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 ("仓储大叔消息组件...");
结果:
aaarticlea/png;base64,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" alt="" />
而如果只希望使用sms发送,那就是:
Decorator smsDecorator = new SMSDecorator ();
smsDecorator.Send ("仓储大叔消息组件...");
aaarticlea/png;base64,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" alt="" />
希望本文章可以给初学者带来收获,呵呵!
说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现的更多相关文章
- 说说设计模式~装饰器模式(Decorator)
返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...
- 设计模式(八)装饰器模式Decorator(结构型)
设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...
- 【PHP设计模式 09_ZhuangShiQi.php】装饰器模式 (decorator)
<?php /** * [装饰器模式 (decorator)] * 有时候发布一篇文章需要经过很多人手,层层处理 */ header("Content-type: text/html; ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 装饰器模式-Decorator(Java实现)
装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...
- 装饰器模式 Decorator 结构型 设计模式 (十)
引子 现实世界的装饰器模式 大家应该都吃过手抓饼,本文装饰器模式以手抓饼为模型展开简介 "老板,来一个手抓饼, 加个培根, 加个鸡蛋,多少钱?" 这句话会不 ...
- 设计模式学习心得<装饰器模式 Decorator>
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装 ...
- 23种设计模式之装饰器模式(Decorator Pattern)
装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包 ...
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
随机推荐
- STM32 DMA模块的配置与使用
DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU的干预,通过DMA数据可以快速地移动.这就节省了CPU的资源来做其他操作. 有多少个DMA资源 ...
- Missing separate debuginfos
问题:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.x86_64解决:1.将/etc/yum.rep ...
- 亲测——pycharm下运行第一个scrapy项目 ©seven_clear
最近在学习scrapy,就想着用pycharm调试,但不知道怎么弄,从网上搜了很多方法,这里总结一个我试成功了的. 首先当然是安装scrapy,安装教程什么的网上一大堆,这里推荐一个详细的:http: ...
- linux系统安装软件方法大全
1.源代码包的安装gzip -d apache_1.3.20.tar.gz (解压)tar xvf apache_1.3.20.tar (解包)cd apache_1.3.20 ./configure ...
- matlab linux 安装
1. 获取matlab的iso文件,并挂载到目录下2. sudo sh $(matlab_path)/matlab安装(破解,相关见说明)3. 加入系统路径,将$(matlab_install_pat ...
- android5.0 aosp编译记录(由于机器硬件原因,改为4.4.2编译通过)
编译环境必须是64位系统啊,妥妥的又装了64位的ubuntu,虚拟机推荐server版本,不带x省性能…… 接着要装openjdk 1.7,记得更新一下系统的源,下面这个不错 deb http://m ...
- Link To Sql简单
Linq及其扩展 Linq是一种数据查询语言(它能够从多种数据源中查询数据). 现在基于Linq的扩展有: Linq To Object:主要是从内存对象中查询数据 Linq To Sql:主要是从M ...
- IO-02. 整数四则运算(10)
本题要求编写程序,计算2个正整数的和.差.积.商并输出.题目保证输入和输出全部在整型范围内. 输入格式: 输入在一行中给出2个正整数A和B. 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺 ...
- python安装MySQLdb模块
以Ubuntu下安装为例: 下载地址:https://pypi.python.org/pypi/MySQL-python/ 解压后直接进入解压目录运行安装命令. python setup.py ins ...
- 设计模式之美:State(状态)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...