假设我有三个名为Phone,DigitalClock和DigitalCompass的SDK类,它们代表隐式数字设备。
这些类支持:
不幸的是,这些类不能会被更改,并且它们不会从任何内容继承。
现在,我有一个支持以下操作的UDP服务和TCP服务:
问题:我希望这些设备能够通过互联网传输和接收他们的流。
解决方案: 我想了两种设计上述问题的方法,我测试了它们,它们都有效:
结果: 电话 - >流到 - > StreamablePhone->发送到 - > UDP服务 - >传输到> NET。
结果: 电话 - >流到 - > IUdpPhone->传输到 - > NET。
我应该选择实施哪种方式,考虑支持添加更多设备或更多网络服务的方案。
答案 0 :(得分:2)
两种模式的主要区别之一是开发人员实施它们的意图。简而言之,Façade是:
表示整个子系统的单个入口点
虽然Adapter会:
匹配不同类的接口
因此,在您的情况下,我将使用Façade,因为您不希望扩展 Phone 中隐藏的功能。您所追求的(如果我理解正确)是简化(和封装)您的子系统和电话(终端)设备之间的通信。所以这里更好的匹配是Façade,因为它定义了一个更高级别的接口,使子系统更易于使用。如果你想更深入地阅读它,有一个概念叫做 Federation中的Enterprise application integration。
此处可用的另一种模式是Command design pattern,因为它将请求封装为对象,从而允许您使用不同的请求,队列或日志请求参数化客户端,并支持可撤销操作。