【发布时间】:2015-05-06 23:09:24
【问题描述】:
假设我有三个 SDK 类,分别是 Phone、DigitalClock 和 DigitalCompass,它们隐含地表示数字设备。
这些类支持:
- PC 到设备和设备到 PC 数据流。
- 连接到 PC 或从 PC 断开连接等操作。
不幸的是,这些类不能被更改,并且它们不会从任何东西继承。
现在,我有一个支持以下操作的UDP服务和TCP服务:
- 获取数据并通过互联网传输。 (PC 到 NET)
- 从互联网接收数据并返回。 (网络到 PC)
问题:我希望这些设备能够通过互联网传输和接收流。
解决方案: 我想了两种方法来设计上述问题,我测试了它们,它们都可以工作:
- 用类似外观的设计模式包装每个类,如下所示:
- StreamablePhone、StreamableDigitalClock 和 StreamableCompass。
- 每个包装类都将继承自 IStreamableDevice。
结果: 手机->流到->StreamablePhone->发送到->UDP服务->传输到->NET。
- 使用 Adapter 设计模式包装这些类,如下所示:
- 适配对象:Phone、DigitalClock 和 DigitalCompass 类。
- 适配器:UDP 服务和 TCP 服务继承自具有匹配名称的接口(以下目标)(IUdp* 与 UDP* 服务,ITcp 与 TCP 服务)。
- 目标:
- UDP 目标将是 IUdpPhone、IUdpDigitalClock 和 IUdpDigitalCompass。
- TCP 目标将是 ITcpPhone、ITcpDigitalClock 和 ITcpDigitalCompass。
结果: 电话->流到->IUdpPhone->传输到->NET。
我应该选择哪种方式实现,考虑它支持添加更多设备或更多网络服务的场景。
【问题讨论】:
标签: c# oop design-patterns adapter facade