中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

說(shuo)說(shuo)設計(ji)模(mo)式~裝飾器模(mo)式(Decorator)~多功能消(xiao)息(xi)組件的實現

返回目錄

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

之前寫過一篇裝飾器模式的文章,感覺(jue)不夠(gou)深(shen)入,這次的(de)例子是實現(xian)項目中遇到(dao)的(de),所以(yi)把它拿出(chu)來,再(zai)寫寫,之前也寫過(guo)(guo)消(xiao)息(xi)(xi)組(zu)件(jian)的(de)文章(zhang),主要(yao)采用了策略模式實現(xian)的(de),即每個(ge)項目可以(yi)通過(guo)(guo)配置進行一種(zhong)(zhong)消(xiao)息(xi)(xi)的(de)訂制(zhi),如(ru)(ru),你可以(yi)訂制(zhi)email,sms,rtx,qq等(deng),但不能同(tong)(tong)時(shi)(shi)采用多(duo)(duo)種(zhong)(zhong)機制(zhi)完成消(xiao)息(xi)(xi)的(de)發(fa)(fa)送,這在一些情(qing)況下是沒有(you)問題的(de),但有(you)時(shi)(shi),我們(men)也需要(yao)同(tong)(tong)時(shi)(shi)為客戶提供多(duo)(duo)種(zhong)(zhong)消(xiao)息(xi)(xi)的(de)推送,這在目前還(huan)是挺(ting)現(xian)時(shi)(shi)的(de),如(ru)(ru)在用戶下單后(hou),同(tong)(tong)時(shi)(shi)為它發(fa)(fa)email 和短信(xin)進行通過(guo)(guo),并對(dui)每個(ge)訂單的(de)過(guo)(guo)程進行跟蹤(zong)并通知給用戶,這對(dui)于用戶來說,體驗非常不錯!

多功能消息組件的組成

1 消息元件抽象 MessageComponent

2 默認的消息實現者DefaultMessage

3 裝飾器抽象 Decorator

4 實現Email消息的裝飾器 EmailDecorator

5 實現SMS消息的裝飾器 SMSDecorator

下面將部分核心代碼公開于世

using System;

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

    /// <summary>
    /// 默認(ren)實現消息發達,可以記錄(lu)日志,訂閱事件,實現默認(ren)的(de)發送消息等功(gong)能(neng)
    /// </summary>
    public class DefaultMessage:MessageComponent
    {
        public override void Send (string message)
        {
            Console.WriteLine ("默(mo)認的消息發送機制");
        }

    }

    /// <summary>
    /// 對(dui)消息發(fa)送(song)(song)的裝飾,如加個(ge)Email發(fa)送(song)(song),SMS發(fa)送(song)(song)等
    /// </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 ("采用(yong)Email發送消息...");
        }

    }

    /// <summary>
    /// SMS消息發送(song)裝飾器
    /// </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添(tian)加(jia)到(dao)sms后(hou),同時它集(ji)成了(le)defaultMessage
            smsDecorator.Send ("倉(cang)儲大叔(shu)消息組件...");

結果:

而如果只希(xi)望使用sms發送,那就是:

            Decorator smsDecorator = new SMSDecorator ();
            smsDecorator.Send ("倉(cang)儲大叔(shu)消(xiao)息組件...");

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

返回目錄

posted @ 2015-03-13 11:27  張占嶺  閱讀(1240)  評論(0)    收藏  舉報