要致富先修路,一说到路啊桥啊我们就想到它的重要性,它可以把本是相对孤立的经济体连接起来,使得双边贸易往来更加便利,经济合作更加高效。桥接,用桥梁连接,英文叫Bridge,其实就是桥梁之意。

现在假设我们要作一幅抽象画,用各种形状的色块来表达世界文化的多样性,起名《形形色色》。

需要什么工具来作画呢?一堆彩笔和一堆尺子。嗯,据我所知,这两种工具分别产于两个孤岛,北岛有很多颜料,擅长制造画笔,南岛则擅长生产尺子,各种形状的尺子,这是劳动分工的最佳典范,下来我们就要去促进南北文具经济合作了,先来看看南岛生产的尺子产品。

这些尺子不管是什么形状,其实都是对绘画线条提供一种规范,那我们就先定义一个尺子的接口,用于规则化笔触的走向。

1 public interface Ruler {// 尺子
2    // 规则化笔触走向
3    public void regularize();
4 }

对于具体的尺子类,我们暂且忽略其大小,一种形状就对应一个类,分别是方形、三角形、还有圆形,它们统统实现尺子的规则接口。

1 public class SquareRuler implements Ruler {
2
3  @Override
4  public void regularize() {//尺子模板画出正方形
5    System.out.println("□");
6  }
7
8 }
1 public class TriangleRuler implements Ruler {
2
3  @Override
4  public void regularize() {//尺子模板画出三角形
5    System.out.println("△");
6  }
7
8 }
1 public class CircleRuler implements Ruler {
2
3  @Override
4  public void regularize() {//尺子模板画出圆形
5    System.out.println("○");
6  }
7
8 }

南岛经济很简单,下来看北岛产品,他们生产的是五颜六色的彩色画笔。

我们对画笔进行抽象,此处我们用抽象类。

 1 public abstract class Pen {//画笔23  protected Ruler ruler;//尺子的引用45  public Pen(Ruler ruler) {6    this.ruler = ruler;7  }89  public abstract void draw();//抽象方法
10 }

注意这里的抽象画笔(第3行)引用了尺子接口,并且声明为protected,得以让彩笔子类进行继承,并由第5行构造子注入尺子,此处便是桥梁对接的重点。最后就是第9行的draw方法了,这个需要具体的彩笔子类进行实现。

接下来看彩笔类,我们依旧保持简约,只实现黑色和白色两种画笔。

 1 public class BlackPen extends Pen {23  public BlackPen(Ruler ruler) {4    super(ruler);5  }67  @Override8  public void draw() {9      System.out.print("黑");
10      ruler.regularize();
11  }
12
13 }
 1 public class WhitePen extends Pen {23  public WhitePen(Ruler ruler) {4    super(ruler);5  }67  @Override8  public void draw() {9      System.out.print("白");
10      ruler.regularize();
11  }
12
13 }

我们在第4行的构造子中调用了抽象画笔的构造子注入传入的尺子,建立桥梁的连接,在第9行选用自己的颜色进行绘画并于第10行调用尺子进行笔触规范。一切就绪,我们开始绘制史诗巨著。

 1 public class Client {23    public static void main(String args[]) {45        //白色画笔对应的所有形状6        new WhitePen(new CircleRuler()).draw();7        new WhitePen(new SquareRuler()).draw();8        new WhitePen(new TriangleRuler()).draw();9
10        //黑色画笔对应的所有形状
11        new BlackPen(new CircleRuler()).draw();
12        new BlackPen(new SquareRuler()).draw();
13        new BlackPen(new TriangleRuler()).draw();
14
15        /*运行结果:
16            白○
17            白□
18            白△
19            黑○
20            黑□
21            黑△
22        */
23    }
24
25 }

注意看我们是怎样进行实例化的,初始化彩笔确定其颜色并注入并确定其形状,紧接着画出来的就是相应的形色组合了。简单吧?接下来就交给南北岛的工人们去做各种形状的尺子和颜色的画笔了,画家会利用这些工具随意组合创作出自己想要的画作。

注意,上图只画出了红色和形状的组合,其他颜色亦是如此,其中7种颜色以及5种形状的组合就达到了35种,而此处我们只需要7+5个类便可以实现。试想如果有更多的颜色和形状,且没有这种松散分离的结构要多少个类来实现?那将会是一场噩梦。有没有发现这就是笛卡儿积的组合,来看我们的代码中的两个集合:

颜色集合={黑,白}

形状集合={圆形,方形,三角}

那么这两个集合的笛卡尔积为

{

 (黑,圆形), (黑,方形), (黑,三角),

    (白,圆形), (白,方形), (白,三角)

}

我们发现这个结构是不是有点像策略模式?其实策略更强调的是行为的替换,就像是之前例子中我们可以随意替换USB接口上接入的各种设备而改变输入输出行为,那对于宿主(电脑主机)本身是耦合了USB接口的,我们无法进行替换,只能重新写个全新的宿主并重新焊接USB接口了。但对于桥接模式而言,它巧妙运用了抽象类(抽象画笔类)植入接口(尺子接口),这样我们不但能替换各种形状的尺子实现类,还能替换各种颜色的画笔子类,这就是对抽象、实现的双边解耦、分离、脱钩。

劳动分工实现了工种的无限的扩展,经济合作则促进了双边组合的无限可能,桥梁作为经济合作发展的纽带不可或缺,一带一路的大战略,扩展靠经济带,连接靠路桥。

JAVA设计模式什么鬼(桥接)——作者:凸凹里歐相关推荐

  1. JAVA设计模式什么鬼(备忘录)——作者:凸凹里歐

    备忘录,备份曾经发生过的历史记录,以防忘记,之后便可以轻松回溯过往.想必我们曾经都干过很多蠢事导致糟糕的结果,当后悔莫及的时候已经是覆水难收了,只可惜这世界上没有后悔药,事后我们能做的只能去弥补过失, ...

  2. JAVA设计模式什么鬼(策略)——作者:凸凹里歐

    策略,Strategy,古时也称"计",为了达成某个目标的方案,目标不同,方案也随之更改.例如特工执行任务时总要准备好几套方案以应对突如其来的变化,A计划实施过程中情况突变导致预案 ...

  3. JAVA设计模式什么鬼(状态)——作者:凸凹里歐

    状态State,指某事物所处的状况或形态,比如水的三态,零下会变成固态冰,常温会是液态水,100℃会蒸发成气态的水蒸气. 在这个地球生态系统中,水的总量并不会增加,也不会减少,只是随着温度的变化其分子 ...

  4. JAVA设计模式什么鬼(代理)——作者:凸凹里歐

    代理,代表打理,以他人的名义代表委托人打理其本职工作之外或不所能及的事务,达成合作关系并更高效地促成事务完成的目的.例如明星经纪人,他们并没有像明星一样会唱歌.跳舞或演戏,而是替明星打理一些无暇顾及的 ...

  5. JAVA设计模式什么鬼(初探)——作者:凸凹里歐

    有物混成,先天地生.寂兮寥兮,独立而不改,周行而不殆,可以为天地母.吾不知其名,字之曰道,强为之名曰大.大曰逝,逝曰远,远曰反. 道是什么?道可道,非常道.道不明,说不尽的才算是道,它是自然法则的终极 ...

  6. JAVA设计模式什么鬼(适配器)——作者:凸凹里歐

    我们这个世界,充满着千奇百怪的对象,更有趣的是对象与对象间是存在着互动,沟通,这样世界才变得美妙.那到底是怎样互动呢?靠什么才能互动呢?是的,接口.比如你和朋友一起喝茶聊天,我们暂且不管声带,耳膜这些 ...

  7. JAVA设计模式什么鬼(装饰)——作者:凸凹里歐

    装饰,在某物件基础上加以修饰,装点,使得原本的朴素变得华丽,达到化腐朽为神奇的效果.比如我们从开发商买来的毛坯房,必然要进行室内装潢这么一项工程,什么简约风啊,北欧风啊,地中海,美式中式等等,当然萝卜 ...

  8. JAVA设计模式什么鬼(模板方法)——作者:凸凹里歐

    面向对象,是对事物属性与行为的封装,方法,指的就是行为.模板方法,显而易见是说某个方法充当了模板的作用,其充分利用了抽象类虚实结合的特性,虚部抽象预留,实部固定延续,以达到将某种固有行为延续至子类的目 ...

  9. JAVA设计模式什么鬼(门面)——作者:凸凹里歐

    开门见山,门,建筑物的入口,面,脸也.门面(Facade),通常指店铺的门头外表部分,当然一定要临街才是好的商铺,在人流量大的地方营造更好的视觉冲击,这样会有更多等等机会暴露给潜在顾客,否则只能是靠& ...

最新文章

  1. xdg-open 打开“irc:*”链接
  2. kmalloc、vmalloc、malloc的区别
  3. Linux free -m命令查看内存使用情况
  4. mysql课程设计案例_JAVA中MySQL建立连接
  5. 厉害了!VMware ESXi安装记录,附下载
  6. MySQL实现远程备份的原理_mysql实现自动远程备份一办法
  7. Socket 核心原理分享
  8. SAP License:SAP合同类型的使用
  9. 解除ASP.net上传文件大小的限制
  10. 如何防止盗号 使用windows自带的 屏幕键盘 OSK
  11. [转载] python中@property装饰器
  12. CentOS7下Tomcat启动慢的原因及解决方案
  13. nginx 分别对各个域名跳转
  14. python抽取html中的链接
  15. linux删除所有python进程,linux 下python进程查看及关闭
  16. 《Spring揭秘》学习部分总结
  17. cad文字宽度因子_为什么CAD中无法修改文字的宽度比例?
  18. 饿了么客户端透明代理 Samaritan详细介绍
  19. C语言中结构体直接赋值
  20. 遗传算法求解无人机路径多目标规划问题(python实现)

热门文章

  1. 前端移动Web第四天案例:阿里百秀首页-响应式布局(bootstrap框架)
  2. 如何解决“.net framework初始化错误”问题
  3. XDU Problem 1037 - 智破机枪阵
  4. VIC之PL192使用介绍
  5. 政务云平台建设与运营解决方案 PPT
  6. 一次网络请求是如何实现的
  7. WIFI版本云音箱使用手册
  8. php 获取用户的IP
  9. 不懂第三方网站、App如何接入微信登录怎么办?这里我详解单点登录之第三方微信登录(建议收藏)
  10. java Map toString() 源码解读测试