我对桥牌模式有一定的了解。我理解接口和实现的解耦。它使用实现者类,就像插件一样,它保存派生类实现的实际逻辑。
但是,有人能解释它是如何允许接口和派生的独立进化的吗?如果我想向接口添加一个新方法,那么它必须在派生类中实现,而派生类将对其进行修改。
其次,当需要新对象时,必须修改客户端代码以设置新的实现者。
发布于 2013-06-10 09:32:18
是的,Bridge模式的目的是将抽象(即接口)与实现分离开来,让它们独立变化。在实践中,想法是使用两个单独的层次结构,而不是经典的单一层次结构。
我们来举个例子吧。假设您有一个窗口抽象,并且您需要创建一个IconWindow子类,该子类专门为每个受支持的平台创建窗口。
使用单一的层次结构,您可以得到:
Window
|--------------...
IconWindow
|
-----------------------------------------------...
| | |
XIconWindow MSIconWindow OSXIconWindow这种结构非常不方便,因为:
因此,最好通过以下方式将这两个层次结构解耦:
imp
Window--------------------------> WindowImp
| |
-----------.... ---------------------------------
| | | |
IconWindow XWindowImp MSWindowImp OSXWindowImp窗口和WindowImp是接口。IconWindow使用窗口提供的方法。窗口依次调用imp上的相关方法。
窗口与WindowImp之间的关系称为桥。
例如:IconWindow::Draw边界()使用窗口::DrawRect(),它调用imp->DevDrawLine(),它在WindowImp中声明并在具体的子类中定义(例如,在类XWindowImp中)。
我的建议是阅读包含上述示例的“设计模式-可重用面向对象软件的元素”(Patterns)一书。
发布于 2013-06-10 07:05:54
我认为Java是说明桥设计模式用户的最好例子。客户端使用抽象(JDBC),而不用担心不同SQL供应商提供的实现(MYSQL、Oracle等)。
为了进一步说明,请考虑使用EmployeeDAOImpl实现带有保存、更新、删除方法的EmployeeDAO接口。现在,这个EmployeeDAOImpl将使用JDBC (抽象)来执行CRUD操作,而不必担心所使用的数据库。EmployeeDAOImpl唯一需要的是加载驱动程序的url。
现在的关键是,EmployeeDAOImpl和其他DAO的层次结构可以独立地变化。他们不必担心JDBI抽象的实现。
发布于 2016-02-01 09:39:42
桥梁模式:
https://stackoverflow.com/questions/17015997
复制相似问题