Bridge桥连接模式的作用是将两样东西链接起来,它们分别是类的功能层次结构和类的实现层次结构。
类的功能层次结构
当有一个Something类,要增加它的功能时,可以创建SomethingGood类同时继承Something类,这样就构成了一个小的类的层次结构。
父类具有基础的功能
在子类中增加新的功能
以上就称为类的功能层次结构。注意类的功能层次结构不应该太深。
类的实现层次结构
抽象类声明了一些抽象方法,定了了API接口,然后子类负责实现这些抽象方法。父类的任务是通过抽象方法的方式定义接口,而子类的任务是实现抽象方法。这里其实存在层次结构。例如子类ConcreteClass实现了父类AbstractClass类的抽象方法,它们之间就构成了一个小的层次结构。
父类通过声明抽象方法来定义接口API
子类通过实现具体方法来实现接口API
这种层次结构称为“类的实现层次结构”。
当我们编写子类时,我们要确认是要增加新功能还是增加实现。当类的层次结构只有一层时,功能层次结构与实现层次结构是混合在一起的,这样很容易使类的层次结构变得复杂,也难理解类的层次结构。
因此我们需要将类的功能层次结构和类的实现层次结构分开。再使用Bridge模式将两种层次结构关联起来。
角色:
Abstraction抽象化:该角色位于 “类的功能层次结构”的最上层。它使用Implementor角色的方法定义了基本的功能。该角色中保存了Implementor角色的实例。
RefinedAbstraction改善后的抽象化:在Abstraction角色基础上增加了新的功能。
Implementor实现者:该角色位于“类的实现层次结构”的最上层,它定义用于实现Abstraction角色的接口API。
ConcreteImplementor具体实现者:该角色实现了Implementor角色中定义的接口API。
重点说明:
类的功能层次结构是通过继承来体现的,子类继承父类后可以增加新的功能。
类的实现层次结构是通过抽象类和实现类来体现的,实现了继承了抽象类并且实现了抽象类中的抽象方法。
继承是强关系,委托是弱关系。
Bridge模式通过委托方式把“类的实现层次结构”委托给“类的功能层次结构”,在代码中体现为:Display父类通过委托方式调用DisplayImpl抽象类。

代码:
public abstract class DisplayImpl {public abstract void rawOpen();
    public abstract void rawPrint();
    public abstract void rawClose();
}

public class StringDisplayImpl extends DisplayImpl {private int width;private String string;public StringDisplayImpl(String string) {this.string = string;this.width = string.length();}@Overridepublic void rawOpen() {pringLine();}@Overridepublic void rawPrint() {System.out.println("|" + string + "|");}@Overridepublic void rawClose() {pringLine();}private void pringLine() {System.out.print("+");for(int i=0;i<width;i++) {System.out.print("-");}System.out.println("+");}
}

public class Display {private DisplayImpl impl;public Display(DisplayImpl impl) {this.impl = impl;}public void open() {impl.rawOpen();}public void print() {impl.rawPrint();}public void close() {impl.rawClose();}public final void display() {open();print();close();}
}

public class CountDisplay extends Display {public CountDisplay(DisplayImpl impl) {super(impl);}public  void multiDisplay(int times) {open();for(int i=0;i<times;i++) {print();}close();}
}

public class Main {public static void main(String[] args) {Display display1 = new CountDisplay(new StringDisplayImpl("display1"));Display display2 = new CountDisplay(new StringDisplayImpl("display2"));CountDisplay display3 = new CountDisplay(new StringDisplayImpl("display2"));display1.display();display2.display();display3.display();display3.multiDisplay(3);}
}

结果:
+--------+
|display1|
+--------+
+--------+
|display2|
+--------+
+--------+
|display2|
+--------+
+--------+
|display2|
|display2|
|display2|
+--------+

转载于:https://www.cnblogs.com/use-D/p/9601524.html

图解设计模式-Bridge模式相关推荐

  1. java bridge 模式_学习:java设计模式—Bridge模式

    一.引子 下面是吕振宇大牛的一个例子,个人觉得挺好的,有助于理解Bridge模式的设计目的: 设想要绘制一幅图画,蓝天.白云.绿树.小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦.毕竟细细的蜡笔 ...

  2. 图解设计模式- Mediator 模式

    读书笔记 仅供参考 简述 Mediator 就是 仲裁者(中介者)模式.如果将程序看作许多类作为一个团队进行工作,那么团队的交流过程就是组员向仲裁者报告,仲裁者向组员下达指标,组员之间不再相互询问. ...

  3. 设计模式学习笔记——桥接(Bridge)模式

    设计模式学习笔记--桥接(Bridge)模式 @(设计模式)[设计模式, 桥接模式, bridge] 设计模式学习笔记桥接Bridge模式 基本介绍 类的功能层次结构 类的实现层次结构 使用桥接模式的 ...

  4. C++设计模式-Bridge桥接模式

    作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...

  5. 设计模式之——bridge模式

    Bridge模式,又叫桥接模式,是针对同一接口进行扩展与实现操作的一种设计模式. 这种模式,与之前学过的适配器模式具有相似的地方,也有不同的地方,下面就让我们一一解析吧. 首先,我们要了解到,为什么需 ...

  6. 说说设计模式~桥梁模式(Bridge)

    在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外 ...

  7. 【笔记整理】图解设计模式 | 第16章 Mediator模式(只有一个仲裁者)

    [笔记整理]图解设计模式 | 导航 定义 组员向仲裁者报告,仲裁者向组员下达指示. 当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者. 当仲裁者下达指示时,组员会立即执行.团 ...

  8. 设计模式--桥接模式(Bridge)

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

  9. 设计模式(五)【Bridge模式】

    Bridge模式 <设计模式>对Bridge模式的意图叙述为:将抽象与实现解耦,使它们都可以独立地变化.(一开始没太懂抽象为啥能和实现分离,后来读完才知道,这里的指A抽象与B实现解耦,而不 ...

最新文章

  1. fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因
  2. BestCoder Round #39 解题报告
  3. 4.2 算法之数论 185 反正切函数的应用 python
  4. [React-Native]样式和布局
  5. HTML基础 DOM概览(第一天)
  6. mui + php,GitHub - alphaphp/mui-kidApp: 基于 MUI 构建一个具有 90 +页面的APP应用
  7. [07-01]http网页提示含义
  8. POJ 2503-Babelfish(map)
  9. 20.SPDY_QUIC_HTTP2_HTTP3
  10. 【mpeg4】xvid参数分析
  11. 信号的平均功率与均方值
  12. 【MySQL-关键字】MySQL中的desc什么意思?有哪些作用?
  13. 如何在linux下配置网络桥接?-使初学者轻松远离ping不通的烦恼
  14. [论文阅读] (07) RAID2020 Cyber Threat Intelligence Modeling Based on Heterogeneous GCN
  15. Access to XMLHttpRequest at ‘http://localhost:8000/v1/users/staffs/‘ from origin ‘http://loca 报错
  16. 大数据分析的四个关键环节
  17. 总结常见的违背Rest原则的接口设计做法
  18. LDO参数解读、特性、参考设计
  19. 树莓派3B+ 叮当语音控制
  20. 关于videojs视频加载重试

热门文章

  1. 1028万!重庆统计局招标大数据平台,开建统计数据中台
  2. java面试题目前为止全内容收集
  3. 海康相机-SDK二次开发(NVR)-多相机IPCamera连接采集-opencv图像格式转换
  4. (转)MS Exchange揭开拨号音还原法的神秘面纱
  5. UE4通过SteamAudio实现3D立体声(HRTF)
  6. provider android简书,android FileProvider的使用
  7. 计算机网络体系结构前沿论文,计算机前沿技术趋势论文_计算机论文3000字_大一计算机导论论文1200字...
  8. 树莓派4B出现no wireless interfaces are found
  9. ecshop仿小米商城源码 带手机移动端
  10. 第五十一篇 并发编程——多进程