一、认识

我们先拿类图分析一下他的主要类:

在类图中出现了四个角色:

1.Abstraction 抽象化类

2.RefinedAbstraction 修正抽象化类

3.Implementation 实现化类

4.RealImplementation 具体实现化类

二、理解

看过一篇文章里面提到了一个例子比较形象,拿来帮助理解。

毛笔和蜡笔,我们有三个型号的笔头和五种颜色,

那么如果使用蜡笔就需要3*5个类去实现。并且需要注意的是:每当我们增加一种新笔头/颜色时类也在扩展

那么如果使用毛笔,我们只需要准备三种型号的毛笔和五种颜色的墨即可,那需要的类就是3+5个,而且他们是相互独立的。这意味着我们要新增颜色/笔头增加RefinedAbstraction/RealImplementatio即可。

三、代码帮助再理解

其实一提到代码的话就比较简单了,我们先看一个通用的桥梁模式的代码。帮助理解上面提到的概念。

/*** 抽象化角色 * 可以理解为我们文中的毛笔* @author liyichen**/
public abstract class Abstraction {//对实现化角色的引用protected Implementation impl;//强制子类必须实现函数public Abstraction(Implementation impl) {super();this.impl = impl;}//自身行为或是属性public void draw() {this.impl.showColor();}}/*------------------------------分割-------------------*//*** 实现化角色* 可以理解为案例中的墨* @author liyichen**/
public interface Implementation {public String showColor();}

/*** 具体抽象化角色 可以理解为粗头的毛笔* @author liyichen**/
public class RefinedAbstraction extends Abstraction{public RefinedAbstraction(Implementation impl) {super(impl);}//修正父类行为@Overridepublic void draw() {System.out.println("粗头毛笔和"+impl.showColor()+"墨在作画");}
}/*---------------------------------分割---------------------*//*** 具体实现化类 就是具体墨的颜色了* @author liyichen**/
public class RealImplementation implements Implementation{@Overridepublic String showColor() {return "RED";}}

对于上层调用来说,可以随意组装。

public static void main(String[] args) {Implementation r = new RealImplementation();Abstraction a = new RefinedAbstraction(r);a.draw();}result:
粗头毛笔和RED墨在作画

我只实现了其中一种情况,我们需要对业务再进行扩展的时候只需要再扩展他们对应的子类就好。

现在想来是不是比直接固定在一个类中的扩展性要强很多。

四、分析

其实通过刚才的例子桥梁的优点不言而喻:

1.抽象和实现分离。

其实它的出现主要就是为了解决继承的缺点,实现可以不受抽象的控制,不用再绑定在一个固定的抽象层次上。

2.优秀的拓展能力

刚才的例子中想再拓展实现,很容易吧。我们已将把变化可能性减到最小。

3.实现细节对上层透明

上层不用关心实现的细节,它已经由抽象层通过聚合完成了封装。什么意思嘞?(看看毛笔的具体实现的draw方法你就明白辽。)

OK,以上。不足之处欢迎指正。

设计模式之桥梁设计模式相关推荐

  1. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  2. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  3. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  4. Python、设计原则和设计模式-创建类设计模式

    Python.设计原则和设计模式 前言 程序的目标:高内聚 低耦合 有哪些设计原则 设计原则是「高内聚.低耦合」的具体落地. 单一职责原则要求在软件系统开发.设计中,一个类只负责一个功能领域的相关职责 ...

  5. 设计模式学习1:设计模式简述和设计模式原则

    设计模式简述 什么是设计模式? 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式的目的: 代码高可用(相同作用的代码能重复 ...

  6. java api中的设计模式_Java API 设计模式之策略(Strategy)

    策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...

  7. [Head First设计模式]生活中学设计模式——迭代器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  8. 构建器设计模式_创新设计模式:构建器模式

    构建器设计模式 以前我们看过工厂和抽象工厂模式. 这些模式可以达到目的,并且确实有用,但是在某些用例中,我们必须创建一个非常复杂的对象,并且创建它需要不同的步骤,每个步骤都需要不同的操作. 在这种情况 ...

  9. 工厂设计模式和策略设计模式_设计模式:策略

    工厂设计模式和策略设计模式 这次我想谈谈策略设计模式 . 通过这种方式,我开始撰写有关行为设计模式的文章. 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好.此方法的最本质点是对象之间的 ...

最新文章

  1. RIP 数据包类型 路由中毒
  2. python报错:ImportError: cannot import name autojit from numba(无法导入numba.autojit)
  3. php红色风格,PHP理财版PC+WAP安装包(红色风格+蓝色风格)
  4. 【31】将文件间的编译依存关系降至最低
  5. 使用Intellij Idea自定义MVC框架
  6. 设计模式 -- 解释器模式(Interpreter Pattern)
  7. 产生式系统实验(AI实验一)
  8. 网管警惕:能突破网关限制的七大软件(转)
  9. Stata: 快速呈现常用分布临界值表
  10. RNN denoise
  11. 蓝牙Sig Mesh 概念入门③——分层结构Layered architecture
  12. 解决only integer scalar arrays can be converted to a scalar index
  13. java isreachable_java-奇数InetAddress.isReachable()问题
  14. 如何快速镜像一个网站
  15. Dreamweaver cs3快捷键一览
  16. 数据分析入门需要了解的统计学知识【持续更新】
  17. 如果当初投10000买iPhone股票 现在能赚81部iPhoneX
  18. Idea设置代码自动提示快捷键
  19. Jeston Xavier NX 语言设置和中文键盘输入
  20. 【图形学】计算机图形处理系统的组成

热门文章

  1. 全国高等学校计算机水平考试二级证书打印,全国高等学校计算机水平考试二级.doc...
  2. c#实现魔兽(warIII)中显血和改键功能
  3. TensorFlow-GPU安装与CUDA,cuDNN版本不匹配问题
  4. java 8 详解_java8新特性详解(转载)
  5. c++课设:高校人员信息管理系统 开发一个简易的高校人员信息管理系统,主要针对高校人员的基本信息进行管理。采用对象链表或对象数组存放各个对象,实现新增、修改、删除、查询以及统计等功能。
  6. 企业为什么喜欢专家或者一专多能的人
  7. 【科普】公交车超载的标准是什么?1平米最多站8人
  8. [力扣cpp实现] 589. N叉树的前序遍历
  9. 一句优化千万、亿万级oracle查询
  10. [转] 低功耗之产品功耗计算