桥接模式有啥好处[关闭]

Posted

技术标签:

【中文标题】桥接模式有啥好处[关闭]【英文标题】:What is benefit of Bridge Pattern [closed]桥接模式有什么好处[关闭] 【发布时间】:2013-08-16 05:47:43 【问题描述】:

当我想学习新东西时,我会问自己,如果我不学习那东西,我会失去什么。我要学习一些设计模式,一切都很好。但是当我到达Bridge Design Pattern 时,我遇到了问题。真的我无法想象什么时候使用这种设计模式。而且我知道 google 和 *** 中还有另一个链接,例如 this。

但是谁能这么说,如果我们忘记 Bridge Design Pattern 并跳过尝试这种模式,我们会失去什么?

【问题讨论】:

这看起来像一个扩展的工厂模式恕我直言 可以看到[在此处输入链接描述][1][1]:***.com/questions/319728/… @mjavadlatify 我以前看过那个链接。不幸的是,这对我没有帮助。 【参考方案1】:

桥接模式只是简单地注意到几个聚合的职责并将它们分开。我将使用 The Gang of Four (TGF) 的示例,因为我认为它非常好:

您有一个 Window 接口,它有两个子类:XWindow(基于 X Window Manager)和 PMWindow(基于 IBM 的 Presentation Manager (PM) Window Manager……我从未听说过)。

即:

interface Window 
class XWindow : Window 
class PMWindow : Window 

继续使用我们的传统继承方法的问题在于,如果您将 Window 专门用于其平台依赖性以外的方面(即,您有一些与您创建要支持的继承树正交的责任),您需要使用桥接模式,否则您的类层次结构将几何深度增长。我认为将桥接视为继承和组合的组合的好方法。

这很罗嗦。回到 TGF 的例子:如果你想要一个 IconWindow 和一个 TransientWindow(有点像玻璃窗格)。 “Icon vs Transient”和“PM vs X”的概念是两个正交的概念,但它们都试图在同一个继承树上。如果不使用桥接模式,您需要做的是创建两个继承自第一个的新接口,以及它们下面的一系列类:

interface Window 
class XWindow : Window 
class PMWindow : Window 
interface IconWindow : Window 
class XIconWindow : XWindow, IconWindow 
class PMIconWindow : PMWindow, IconWindow 
interface TransientWindow : Window 
class XTransientWIndow : XWindow, TransientWindow 
class PMTransientWindow : PMWindow, TransientWindow 

使用桥接模式,您可以将这两个职责分离到两个继承树上:

interface Window 
class IconWindow : Window  //this class...
class TransientWindow : Window  //and this one will keep a private reference to aWindowImp
interface WindowImp: Window 
class XWindowImp : WindowImp 
class PMWindowImp : WindowImp 

更干净,更好的职责分离,更容易编写和使用!

相信这个设计问题和桥对象树的奇怪之处实际上是推动 Scala 中 Mix-ins 设计的一些问题。使用 C++ 的多重继承,您可以将任何实现静态耦合到它们的窗口系统。换句话说,您将拥有与非桥接模式相同数量的类型,但它们可能是空类,您当然可以通过抽象来引用它们,这使得使用起来相当容易。

【讨论】:

这是一个很好的例子,但是你能描述一下BridgeStrategy 模式之间的区别吗?它们看起来很相似! 谢谢你,我认为你的例子有助于理解Bridge Pattern 我真的认为每个人都能联想到的例子会更合适(很多人甚至不熟悉这些日期技术)【参考方案2】:

桥的优点是抽象和实现是分离的。实现也在运行时动态变化,抽象和实现的可扩展性得到提高。

通过在抽象的生成中指定一个参数,实现也可以选择,因为客户端的实现是完全隐藏的。可以避免类数量的大幅增加。

【讨论】:

你能举个例子吗? 看看这个dofactory.com/Patterns/PatternBridge.aspx#_self1 想象你有一个类可以访问你的抽象类中你的类想要实现的方法。您现在可以在学期期间更改实现的桥接模式,因此它不绑定到抽象类的方法 @Coder 我看到了那个链接。它对我没有帮助。 谢谢@WEBALDO.at。您能否在示例中展示 ListListImpl 如何在运行时动态更改?

以上是关于桥接模式有啥好处[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

“桥接”和“NAT”方式有什么区别啊?

路由器的中继模式Repeater和桥接模式Bridge有啥区别

设计模式之桥接模式

光猫怎么改桥接模式

天翼网关路由模式改到桥接模式是不是能改进使用效果?

vmware桥接模式下无法联网