我的一个同事问我关于WCF windows服务在ASP.net客户端应用程序中实现的设计模式,我真的无法确定它是桥接(Bridge)还是适配器(Adapter)!
这是我的实现:
- 我获取了服务契约
- 定义了一个与我的WCF数据契约类似的新接口
- 我创建了一个WCF客户端,并将其包装在新接口中
- 将新接口操作映射到原始的WCF客户端(我在这里进行一些日志记录/错误处理)
我一直认为这是适配器模式的实现,但我真的无法确定为什么不是桥接模式!
我已经阅读了SO、GoF和维基百科上的所有帖子,但它真的没有任何意义!
从我的理解来看,两种模式都指向现有类型,都将抽象与其实现分离,我错过什么了吗?
以下是来自GoF的内容:
这些模式之间的关键区别在于它们的意图。适配器侧重于解决两个现有接口之间的不兼容性。它不关注这些接口是如何实现的,也不考虑它们可能独立地发展。它是一种在不重新实现其中一个类的情况下使两个独立设计的类协同工作的方法。桥接模式则桥接了一个抽象和它的(潜在的众多)实现。它为客户提供了一个稳定的接口,同时允许您变化实现它的类。随着系统的发展,它还可以容纳新的实现。
我不完全理解上述陈述,
- 这是否意味着如果我在设计时更改被适配者或原始接口的实现,则它是桥接模式?
- 这些差异听起来微不足道,是否还有其他的实现/抽象方面的差异?
- 开发后如何确定使用了哪种实现?
更新:
同样来自GoF:
请记住,适配器使两个现有接口协同工作,而不是定义全新的接口。
这是否意味着更改现有接口以使其与另一个接口协同工作是 Adapter 的实现方式?
更新2:
刚刚发现了这篇令人难以置信的文章:C#中的GOF设计模式图解
这是真正的桥接模式结构:
我错过的是,桥接模式让你独立地组合不同的抽象和实现,并且可以将它们 扩展