gpt4 book ai didi

c# - 桥接器与适配器设计模式

转载 作者:IT王子 更新时间:2023-10-29 04:44:19 29 4
gpt4 key购买 nike

我被同事问到我在 ASP.net 客户端应用程序中实现 WCF 窗口服务的设计模式,我真的分不清是 Bridge 还是 Adapter !

实现如下:

  • 我已获得服务契约(Contract)
  • 定义了一个类似于我的 WCF 数据协定的新接口(interface)
  • 我创建了一个 WCF 客户端并将其包装在新界面中
  • 将新接口(interface)操作映射到原始 WCF 客户端(我在这里进行一些日志记录/错误处理)

我一直认为它是Adapter 模式的实现,但我真的不知道为什么不是Bridge!

我已经阅读了 SO、GoF 和维基百科中的所有帖子,但它真的毫无意义!

根据我的理解,这两种模式都指向现有类型,都将抽象与其实现分离我是否漏掉了一点?

来自 GoF:

The key difference between these patterns lies in their intents. Adapter focuses on resolving incompatibilities between two existing interfaces. It doesn't focus on how those interfaces are implemented, nor does it consider how they might evolve independently. It's a way of making two independently designed classes work together without reimplementing one or the other. Bridge, on the other hand, bridges an abstraction and its (potentially numerous) implementations. It provides a stable interface to clients even as it lets you vary the classes that implement it. It also accommodates new implementations as the system evolves.

我不是很理解上面的说法,

  1. 这是否意味着如果我改变适应者或改变实现设计时的原始界面那么它是Bridge Pattern
  2. 差异听起来微不足道,还有其他差异吗实现/放弃?
  3. 谁能知道之后使用了什么实现发展?
  4. 谁能给我一个桥接模式的好例子,以及它是如何做到的在软件生命周期中被更改?

更新:

再次来自 GoF:

Remember that an adapter makes two existing interfaces work together as opposed to defining an entirely new one.

这是否意味着改变现有接口(interface)使其可以与另一个接口(interface)一起工作是Adapter的实现?

更新2:

刚刚找到这篇令人难以置信的文章:Illustrated GOF Design Patterns in C#

这是真正的桥接模式结构:

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

最佳答案

我认为您这里没有纯 GoF 模式。它介于 Decorator 和 Adapter 之间。您正在更改服务客户端的界面(使其适应您的需要)。但是你也在为客户端添加新的职责(日志记录和错误处理)——这是一个装饰部分。如果您保留原始服务接口(interface),那将是纯粹的 Decorator。

更新:任何继承的使用并不意味着我们正在使用某种 GoF 模式。您当前的架构缺少一些东西是 Bridge:

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

关于c# - 桥接器与适配器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641999/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com