设计模式实践-桥接模式
场景
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类仪表数据