首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >网桥与适配器设计模式

网桥与适配器设计模式
EN

Stack Overflow用户
提问于 2012-05-18 03:08:07
回答 3查看 8.4K关注 0票数 20

我的一位同事询问了我在ASP.net客户端应用程序中实现windows服务的设计模式,我真的不知道它是还是适配器

具体实现如下:

我已经获得了服务contract

  • Defined一个类似于我的WCF数据契约的新接口

  • 我创建了一个WCF客户端并将其包装在新的interface

  • Mapped中新的接口操作到原始的WCF客户端(我在这里执行一些日志记录/错误处理)

我一直认为它是适配器桥模式的实现,但实际上我不知道为什么它不是

我已经看过了SO,GoF和维基百科上的所有帖子,但这真的没有任何意义!

据我所知,这两种模式都指向一个现有的类型,两种模式都将抽象从其实现中解耦我是不是漏掉了一点?

以下是来自GoF的内容:

这些模式之间的关键区别在于它们的意图。适配器专注于解决两个现有接口之间的不兼容性。它不关注这些接口是如何实现的,也不考虑它们可能如何独立发展。这是一种让两个独立设计的类一起工作的方法,而不需要重新实现其中的一个。另一方面,桥接了抽象及其(可能有许多)实现。它为客户端提供了一个稳定的接口,即使它允许您改变实现它的类。随着系统的发展,它还可以容纳新的实现。

我不能完全理解上面的陈述,

  1. 是否意味着如果我在设计时改变适配器或更改原始接口的实现,那么桥Pattern
  2. The差异听起来微不足道,在implementation/abstcation?
  3. How中是否有任何其他差异谁能告诉我在桥模式之后使用了什么实现谁给我举了一个桥模式的好例子,以及如何在软件生命周期中更改它?

更新:

同样来自GoF:

请记住,适配器使两个现有接口协同工作,而不是定义一个全新的接口。

这是否意味着更改现有接口以使其可以与另一个接口一起工作是适配器的一个实现

Update2:

我找到了这篇不可思议的文章:Illustrated GOF Design Patterns in C#

这是真正的Bridge Patter结构:

我忽略了一个事实,即桥模式允许您组合不同的抽象和实现,并独立地对它们进行扩展和扩展

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-18 03:37:23

我认为这里不是纯GoF模式。它介于Decorator和Adapter之间。您正在更改服务客户端的接口(使其适应您的需求)。但是你也给客户端增加了新的职责(日志和错误处理)--这是装饰的一部分。如果你想继续使用原始的服务接口,它将是纯装饰器。

更新:继承的任何用法并不意味着我们正在使用某种GoF模式。作为Bridge,您当前的体系结构缺少几个东西:

  • 实现的层次结构。您的服务接口应该定义一些低级操作。并且您应该有多个服务implementations.
  • Abstraction应该定义高级接口。通常这些接口看起来不像实现接口(您的客户端接口类似于服务接口,它存在于abstraction).
  • Abstraction的同一级别上)实现应该使用服务接口来实现高级操作(即,它们不向服务添加一些职责,它们实现不同的东西,高级的东西)。
票数 6
EN

Stack Overflow用户

发布于 2012-05-18 03:33:45

我被解释说桥接模式是为了将两个具有不同目的的类层次结构结合起来。例如,假设您正在编写一个具有不同类型的控件和对不同窗口系统的支持的窗口框架。您将有一个用于控件的类树和另一个用于抽象窗口系统之间差异的类树。现在,如果您想要添加对另一个窗口系统的支持,只需将其添加到层次结构的那一侧,如果您想要添加新控件,则将它们添加到它们的一侧。“桥梁”存在于两个层次结构的顶层类之间,您的控件类可以访问由实现各种窗口系统支持的类层次结构的基类定义的抽象函数。

使用适配器模式,您不希望将具有不同意图的两个类层次结构组合在一起,而是调整一个类以使用您自己的接口。我想,如果你在上面的例子中只支持一个窗口系统,并且没有在其中放一个抽象类来维护可扩展性,那么它将是一个适配器而不是一个桥。

票数 5
EN

Stack Overflow用户

发布于 2012-05-18 04:28:13

这在前面已经讨论过了-- Difference between Bridge pattern and Adapter pattern --你想要从GoF得到的真正的引述是“适配器使事物在设计之后工作;桥使它们在设计之前工作。”GoF,p219

你的最后一个问题得到了肯定的答案--适配器被用来使系统中两个原本不愉快的元素很好地结合在一起,而不会改变它们的基本功能,而不仅仅是可能子化它们的功能的联合--

桥接模式通常用于处理初始设计中的问题,在初始设计中,呈现给消费者的心理模型可能与实现消费者模型实现的模型有很大不同。考虑一个高性能的数学库,它在各种各样的处理器上看起来都是一样的-你只是想要乘以矩阵,但在幕后有各种各样的繁琐的事情,包括swizzling,并行数据流,避免流水线停滞的奇怪行为,以及在高性能超定标器内核的3+实现上的所有不同的实现-这只是英特尔:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10641999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档