设计模式实践-桥接模式
场景
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类仪表数据
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号