首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >桥梁模式理解

桥梁模式理解
EN

Stack Overflow用户
提问于 2013-06-10 02:01:32
回答 3查看 2.9K关注 0票数 8

我对桥牌模式有一定的了解。我理解接口和实现的解耦。它使用实现者类,就像插件一样,它保存派生类实现的实际逻辑。

但是,有人能解释它是如何允许接口和派生的独立进化的吗?如果我想向接口添加一个新方法,那么它必须在派生类中实现,而派生类将对其进行修改。

其次,当需要新对象时,必须修改客户端代码以设置新的实现者

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-10 09:32:18

是的,Bridge模式的目的是将抽象(即接口)与实现分离开来,让它们独立变化。在实践中,想法是使用两个单独的层次结构,而不是经典的单一层次结构。

我们来举个例子吧。假设您有一个窗口抽象,并且您需要创建一个IconWindow子类,该子类专门为每个受支持的平台创建窗口。

使用单一的层次结构,您可以得到:

代码语言:javascript
复制
                     Window
                       |--------------...
                   IconWindow
                       |
   -----------------------------------------------...
   |                   |                   |
XIconWindow       MSIconWindow      OSXIconWindow

这种结构非常不方便,因为:

  • 如果您想要添加一个专门用于窗口(例如BitmapWindow)的新子类,则必须为每个受支持的平台创建一个子类(即本例中的三个子类)。
  • 如果要添加受支持的平台,则必须为现有的每个专门化添加一个新的子类。

因此,最好通过以下方式将这两个层次结构解耦:

代码语言:javascript
复制
             imp
      Window--------------------------> WindowImp
         |                                  |
    -----------....            ---------------------------------
    |                          |              |                |
IconWindow                XWindowImp      MSWindowImp    OSXWindowImp

窗口和WindowImp是接口。IconWindow使用窗口提供的方法。窗口依次调用imp上的相关方法。

窗口与WindowImp之间的关系称为

例如:IconWindow::Draw边界()使用窗口::DrawRect(),它调用imp->DevDrawLine(),它在WindowImp中声明并在具体的子类中定义(例如,在类XWindowImp中)。

我的建议是阅读包含上述示例的“设计模式-可重用面向对象软件的元素”(Patterns)一书。

票数 21
EN

Stack Overflow用户

发布于 2013-06-10 07:05:54

我认为Java是说明桥设计模式用户的最好例子。客户端使用抽象(JDBC),而不用担心不同SQL供应商提供的实现(MYSQL、Oracle等)。

为了进一步说明,请考虑使用EmployeeDAOImpl实现带有保存、更新、删除方法的EmployeeDAO接口。现在,这个EmployeeDAOImpl将使用JDBC (抽象)来执行CRUD操作,而不必担心所使用的数据库。EmployeeDAOImpl唯一需要的是加载驱动程序的url。

现在的关键是,EmployeeDAOImpl和其他DAO的层次结构可以独立地变化。他们不必担心JDBI抽象的实现。

票数 3
EN

Stack Overflow用户

发布于 2016-02-01 09:39:42

桥梁模式:

  • 将抽象与其实现分离,以便两者可以独立地变化;
  • 结构模式;
  • 桥模式是软件工程中使用的一种设计模式,其目的是“将抽象与其实现分离,以便两者可以独立地变化”。该桥使用封装、聚合,并可以使用继承将责任分离为不同的类;
  • 当类经常变化时,面向对象编程的特性变得非常有用,因为对程序代码的更改可以很容易地在程序的最少先验知识的情况下进行。当类和它所做的事情经常发生变化时,桥模式很有用。类本身可以被看作是实现,类可以做什么作为抽象。桥梁模式也可以被认为是两层抽象;
  • 网桥模式常常与适配器模式混淆。实际上,桥接器模式通常使用类适配器模式来实现;
  • 变体:通过将实现的存在推迟到使用抽象的位置,实现可以更多地解耦。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17015997

复制
相关文章

相似问题

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