我的一位同事询问了我在ASP.net客户端应用程序中实现windows服务的设计模式,我真的不知道它是桥还是适配器!
具体实现如下:
我已经获得了服务contract
我一直认为它是适配器桥模式的实现,但实际上我不知道为什么它不是!
我已经看过了SO,GoF和维基百科上的所有帖子,但这真的没有任何意义!
据我所知,这两种模式都指向一个现有的类型,两种模式都将抽象从其实现中解耦我是不是漏掉了一点?
以下是来自GoF的内容:
这些模式之间的关键区别在于它们的意图。适配器专注于解决两个现有接口之间的不兼容性。它不关注这些接口是如何实现的,也不考虑它们可能如何独立发展。这是一种让两个独立设计的类一起工作的方法,而不需要重新实现其中的一个。另一方面,桥接了抽象及其(可能有许多)实现。它为客户端提供了一个稳定的接口,即使它允许您改变实现它的类。随着系统的发展,它还可以容纳新的实现。
我不能完全理解上面的陈述,
更新:
同样来自GoF:
请记住,适配器使两个现有接口协同工作,而不是定义一个全新的接口。
这是否意味着更改现有接口以使其可以与另一个接口一起工作是适配器的一个实现
Update2:
我找到了这篇不可思议的文章:Illustrated GOF Design Patterns in C#
这是真正的Bridge Patter结构:
我忽略了一个事实,即桥模式允许您组合不同的抽象和实现,并独立地对它们进行扩展和扩展
发布于 2012-05-18 03:37:23
我认为这里不是纯GoF模式。它介于Decorator和Adapter之间。您正在更改服务客户端的接口(使其适应您的需求)。但是你也给客户端增加了新的职责(日志和错误处理)--这是装饰的一部分。如果你想继续使用原始的服务接口,它将是纯装饰器。
更新:继承的任何用法并不意味着我们正在使用某种GoF模式。作为Bridge,您当前的体系结构缺少几个东西:
发布于 2012-05-18 03:33:45
我被解释说桥接模式是为了将两个具有不同目的的类层次结构结合起来。例如,假设您正在编写一个具有不同类型的控件和对不同窗口系统的支持的窗口框架。您将有一个用于控件的类树和另一个用于抽象窗口系统之间差异的类树。现在,如果您想要添加对另一个窗口系统的支持,只需将其添加到层次结构的那一侧,如果您想要添加新控件,则将它们添加到它们的一侧。“桥梁”存在于两个层次结构的顶层类之间,您的控件类可以访问由实现各种窗口系统支持的类层次结构的基类定义的抽象函数。
使用适配器模式,您不希望将具有不同意图的两个类层次结构组合在一起,而是调整一个类以使用您自己的接口。我想,如果你在上面的例子中只支持一个窗口系统,并且没有在其中放一个抽象类来维护可扩展性,那么它将是一个适配器而不是一个桥。
发布于 2012-05-18 04:28:13
这在前面已经讨论过了-- Difference between Bridge pattern and Adapter pattern --你想要从GoF得到的真正的引述是“适配器使事物在设计之后工作;桥使它们在设计之前工作。”GoF,p219
你的最后一个问题得到了肯定的答案--适配器被用来使系统中两个原本不愉快的元素很好地结合在一起,而不会改变它们的基本功能,而不仅仅是可能子化它们的功能的联合--
桥接模式通常用于处理初始设计中的问题,在初始设计中,呈现给消费者的心理模型可能与实现消费者模型实现的模型有很大不同。考虑一个高性能的数学库,它在各种各样的处理器上看起来都是一样的-你只是想要乘以矩阵,但在幕后有各种各样的繁琐的事情,包括swizzling,并行数据流,避免流水线停滞的奇怪行为,以及在高性能超定标器内核的3+实现上的所有不同的实现-这只是英特尔:
https://stackoverflow.com/questions/10641999
复制相似问题