大家好,今天小编来为大家解答以下的问题,关于4.2 桥接模式:对象结构型模式解析,这个很多人还不知道,现在让我们一起来看看吧!
3 动机
当一个抽象可能有多个实现时,通常使用继承来协调它们。抽象定义了该抽象的接口,具体子类以不同的方式实现它。但这种方法有时不够灵活。继承机制将抽象部分和实现部分固定在一起,使得抽象部分和实现部分很难单独修改、扩展和重用。
让我们考虑一下用户界面框中Windo 抽象的可移植实现。例如,这种抽象应该允许用户开发可在X Window 系统和IBM 的演示管理器(PM) 系统中使用的应用程序。利用继承机制,我们可以定义Window抽象类及其两个子类Xwindow和PMWindow,分别实现不同系统平台的Window接口。但继承机制有两个缺点:
1 不方便扩展Window抽象以适用于不同类型的Windows或新的系统平台。假设Window有一个子类IconWindow,它专门将Window从图标处理中抽象出来。为了使IconWindow支持两个系统平台,我们必须实现两个新类XIconWindow和PMIIconWindow。更糟糕的是,我们必须为每种类型的窗口定义两个类,并且为了支持第三个系统平台,我们还必须为每种类型的窗口定义一个新的Window 子类,如下图所示
image.png2 继承机制使得客户端代码具有平台依赖性。每当客户端创建一个窗口时,它必须实例化一个具有特定实现部分的具体类。例如,创建一个XWindow 对象将Window 抽象绑定到XWindow 的实现,从而使客户端程序依赖于XWindow 的实现。这将使将客户代码移植到其他平台变得困难。客户在创建窗口时不应该参与其具体实现。只有窗口的实现取决于应用程序运行的平台。这样,客户端代码在创建窗口中不应是特定于平台的。
桥接模式通过将Window 抽象及其实现部分放置在单独的类层次结构中来解决上述问题。一个类层次结构用于窗口界面,而一个单独的类层次结构用于特定于平台的接口实现。该类层次结构的根类是WindowImp。例如,XWindowImp子类提供了基于XWindow系统的实现,如下图所示:
图片.png
对Window子类的所有操作都使用WindowImp接口中的抽象操作来实现,它将窗口的抽象与系统平台相关的实现部分分开。因此,我们将Window和WindowImp之间的关系称为桥梁,因为它充当抽象类与其实现之间的桥梁,允许它们独立地改变。
4. 适应性
在以下情况下使用明亮模式:
1 您不希望抽象与其实现之间有固定的绑定。例如,这可能是因为应在程序运行时选择或切换实现部分;类的抽象及其实现可以通过生成子类来扩展。这时候,Bridge模式就可以让你组合不同的抽象。将接口和实现部分结合起来,分别进行扩展; 3 抽象实现部分的修改应该对客户没有影响,即客户的代码不必重新编译; 4 (C++) 您希望对客户实现部分完全隐藏抽象。在C++ 中,类的表示在类接口中可见;5 如意图部分中的第一个类图所示,需要生成许多类。这样的类层次结构意味着您必须将一个对象分解为两部分;6您希望在多个对象之间共享实现(可能使用引用计数),但同时要求客户端不知道这一点。
5 结构
image.png
6 参与者
抽象(窗口)
—— 定义抽象类的接口
—— 维护一个指向Implemtor类型对象RefinedAbstraction(IconWindow)的指针
—— 扩展Abstraction定义的接口Implementor(WindowImp)
—— 定义了实现类的接口。该接口不必与Abstraction 的接口完全相同。事实上,这两个接口可以完全不同。一般来说,Implementor接口只提供基本操作,而Abstraction则基于这些基本操作定义了更高层次的操作;具体实现器(XWindowImp、PMWindowImp)
—— 实现Implementor 接口并定义其具体实现
7 协作
抽象将客户端的请求转发到其Implementor 对象
8 效果
桥接模式有以下优点:
1 接口和实现部分分离2 提供可扩展性3 实现细节对客户透明
9 实现
需要注意的问题:
OK,本文到此结束,希望对大家有所帮助。
【4.2 桥接模式:对象结构型模式解析】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
明白了?就是像两个不同软件系统之间做个桥梁那种!
有5位网友表示赞同!
听起来很专业,但我希望能具体讲讲这在实际应用中的场景吧。
有9位网友表示赞同!
以前在编程中遇到过类似的问题,总觉得很麻烦。这个模式能不能解决这些问题?
有7位网友表示赞同!
4.2 BRIDGE... 编号是不是可以更直白一点呢?让人一眼就明白是哪个类型的模式。
有18位网友表示赞同!
我印象里有一些设计模式是专门用来处理这种不同系统间交互的,BRIDGE就是其中之一么?
有11位网友表示赞同!
对象结构型模式听起来有点高大上,它主要还是为了提高代码的结构和可维护性吧?
有16位网友表示赞同!
桥接模式能让我们把复杂的操作拆分成更小的单元吗?
有14位网友表示赞同!
这种模式有什么具体的优点和缺点呢?
有13位网友表示赞同!
BRIDGE 模式能够使不同的实现之间独立变化么? 这太重要了!
有15位网友表示赞同!
我很好奇这个模式在实际项目开发中是如何应用的,有没有一些案例可以参考?
有11位网友表示赞同!
如果想学这方面的知识,哪里有比较好的资源呢?
有9位网友表示赞同!
感觉这种模式对软件工程的学习很有帮助啊!
有6位网友表示赞同!
我已经有一些基本的编程知识了,这个BRIDGE 模式应该比较容易理解吧?
有9位网友表示赞同!
我想试着自己去实践一下桥接模式,看看能不能写出一段简单的代码。
有6位网友表示赞同!
学习设计模式是一个缓慢的过程,看来需要花时间慢慢积累经验!
有10位网友表示赞同!
期待看到更多关于 BRIDGE 模式 的讲解和讨论!
有13位网友表示赞同!
谢谢分享这个有用的信息! 我现在更想去深入了解BRIDGE 模式了!
有14位网友表示赞同!
这篇文章让我对桥接模式有了更清晰的认识,接下来我就要去看其他相关内容了。
有5位网友表示赞同!
希望会有更多文章来讲解不同类型的设计模式!
有12位网友表示赞同!