设计模式实践-桥接模式

场景

M每种仪表可选N种通信方式

实现代码

通信器接口

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// 通信器接口
    /// </summary>
    public interface ICommunicator
    {
        /// <summary>
        /// 发送信息
        /// </summary>
        /// <param name="message">信息内容</param>
        void Communicate(string message);
    }
}

串口通信实现

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// 串口通信器
    /// </summary>
    internal class SerialCommunicator : ICommunicator
    {
        /// <summary>
        /// 向串口发送信息
        /// </summary>
        /// <param name="message">信息内容</param>
        public void Communicate(string message)
        {
            Console.WriteLine($"使用串口通信,通信内容为:{message}");
        }
    }
}

TCP通信实现

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// TCP通信器
    /// </summary>
    internal class TcpCommunicator : ICommunicator
    {
        /// <summary>
        /// 向TCP发送信息
        /// </summary>
        /// <param name="message">信息内容</param>
        public void Communicate(string message)
        {
            Console.WriteLine($"使用TCP通信,通信内容为:{message}");
        }
    }
}

仪表接口

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// 仪表接口
    /// </summary>
    internal interface IMeter
    {
        /// <summary>
        /// 仪表通信函数
        /// </summary>
        /// <param name="communicator">通信器</param>
        void UseCommunicator(ICommunicator communicator);
    }
}

仪表A实现

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// 仪表A实现
    /// </summary>
    internal class MeterA : IMeter
    {
        /// <summary>
        /// 仪表A通信实现
        /// </summary>
        /// <param name="communicator">通信器</param>
        public void UseCommunicator(ICommunicator communicator)
        {
            communicator.Communicate("A类仪表数据");
        }
    }
}

仪表B实现

namespace DesignPatterns.Bridge
{
    /// <summary>
    /// 仪表B接口
    /// </summary>
    internal class MeterB : IMeter
    {
        /// <summary>
        /// 仪表B通信实现
        /// </summary>
        /// <param name="communicator">通信器</param>
        public void UseCommunicator(ICommunicator communicator)
        {
            communicator.Communicate("B类仪表数据");
        }
    }
}

相关调用

IMeter meterA = new MeterA();
IMeter meterB = new MeterB();
ICommunicator tcpSender = new TcpCommunicator();
ICommunicator serialSender = new SerialCommunicator();

meterA.UseCommunicator(tcpSender);
meterA.UseCommunicator(serialSender);

meterB.UseCommunicator(tcpSender);
meterB.UseCommunicator(serialSender);

Out

使用TCP通信,通信内容为:A类仪表数据
使用串口通信,通信内容为:A类仪表数据
使用TCP通信,通信内容为:B类仪表数据
使用串口通信,通信内容为:B类仪表数据
posted @ 2016-07-14 20:36  4Thing  阅读(120)  评论(0编辑  收藏  举报