桥接模式就是发现一些职责交汇在一起,然后将它们分开。我将使用《设计模式》的例子,因为我认为这是一个非常好的例子:
你有一个窗口接口,有两个子类:XWindow(基于X Window Manager)和PMWindow(基于IBM的Presentation Manager (PM)窗口管理器……我从未听说过)。
比如:
interface Window {}
class XWindow : Window {}
class PMWindow : Window {}
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 ++的多重继承,您将静态耦合任何实现到其窗口系统。换句话说,您将拥有与非桥接模式相同数量的类型,但它们可能是空类,当然您可以通过抽象引用它们,这使得消费起来相当容易。
List
和ListImpl
? - Seyed Morteza Mousavi