设计模式实践-装饰器

场景

使用HongDian DTU后需要在原本发送的逻辑前先发送HongDian规定的内容

实现代码

DTU组件接口:

namespace DesignPatterns.Decorator
{
    /// <summary>
    /// DTU组件接口
    /// </summary>
    public interface IDtuComponent
    {
        /// <summary>
        /// 向DTU发送数据
        /// </summary>
        void SendData();
    }
}

标准DTU组件实现:

namespace DesignPatterns.Decorator
{
    /// <summary>
    /// 标准DTU组件
    /// </summary>
    public class StandDtuComponent : IDtuComponent
    {
        /// <summary>
        /// 向标准DTU发送数据
        /// </summary>
        public void SendData()
        {
            Console.WriteLine("发送透明DTU数据");
        }
    }
}

宏电DTU组件实现:

namespace DesignPatterns.Decorator
{
    /// <summary>
    /// 宏电DTU组件
    /// </summary>
    public class HongDianDtu : IDtuComponent
    {
        /// <summary>
        /// dtu组件
        /// </summary>
        private readonly IDtuComponent _dtuComponent;

        /// <summary>
        /// Initializes a new instance of the <see cref="HongDianDtu" /> class.
        /// </summary>
        /// <param name="dtuComponent">DTU组件</param>
        public HongDianDtu(IDtuComponent dtuComponent)
        {
            this._dtuComponent = dtuComponent;
        }

        /// <summary>
        /// 向宏电DTU发送数据
        /// </summary>
        public void SendData()
        {
            Console.WriteLine("发送宏电Dtu数据");

            // some action

            this._dtuComponent.SendData();
        }
    }
}

相关调用

        IDtuComponent standDtu = new StandDtuComponent();
        IDtuComponent hongDianDtu = new HongDianDtu(standDtu);
        hongDianDtu.SendData();

Out:

发送宏电Dtu数据
发送透明DTU数据
posted @ 2016-07-18 23:04  4Thing  阅读(98)  评论(0编辑  收藏  举报