文章出處

返回目錄

為何要設計多功能消息組件

之前寫過一篇裝飾器模式的文章,感覺不夠深入,這次的例子是實現項目中遇到的,所以把它拿出來,再寫寫,之前也寫過消息組件的文章,主要采用了策略模式實現的,即每個項目可以通過配置進行一種消息的訂制,如,你可以訂制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 ("倉儲大叔消息組件...");

希望本文章可以給初學者帶來收獲,呵呵!

返回目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()