设计模式之桥接模式详解

文章目录

  • 设计模式之桥接模式详解
  • 一、什么是桥接模式
  • 二、桥接模式的应用场景
  • 三、桥接模式的角色组成
  • 四、桥接模式通用写法示例
  • 五、桥接模式优缺点

一、什么是桥接模式

桥接模式(Bridge Pattern) 也称为桥梁模式、接口模式或者柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现。

二、桥接模式的应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适用于以下几种业务场景:

  1. 在抽象和具体实现之间需要增加更多的灵活性的场景
  2. 一个类存在两个或多个独立变化的维度,而这两个或多个维度都需要独立进行扩展
  3. 不希望使用继承,或因为多层继承导致系统类的个数剧增

桥接模式的一个常用场景就是为了替换继承。我们知道继承有很多优点,比如抽象,封装,多态等,父类封装共性,子类实现特性。继承可以很好地帮助我们实现代码复用(封装)的功能,但是同时,这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类是否需要。这说明了继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为,优先使用组合/聚合的方式,而不是继承。

三、桥接模式的角色组成

  • 抽象(Abstraction): 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
  • 修正抽象(RefinedAbstraction): Abstraction的具体实现,对Abstraction的方法进行完善和扩展;
  • 实现(Implementor): 确定实现维度的基本操作,提供给Abstraction使用。该类一般为接口或者抽象类;
  • 具体实现(ConcreteImplementor): Implementor的具体实现;

四、桥接模式通用写法示例

创建抽象Abstraction:

/*** 抽象 Abstraction */
public abstract class Abstraction {protected IImplementor mImplementor;public Abstraction(IImplementor implementor) {this.mImplementor = implementor;}public void operation() {this.mImplementor.operationImpl();}}

创建修正抽象角色RefinedAbstraction:

/*** 修正抽象 RefinedAbstraction*/
public class RefinedAbstraction extends Abstraction {public RefinedAbstraction(IImplementor implementor) {super(implementor);}@Overridepublic void operation() {super.operation();System.out.println("refined operation");}}

创建实现角色Implementor:

public interface IImplementor {void operationImpl();}

创建具体实现角色ConcreteImplementorA:

public class ConcreteImplementorA implements IImplementor {public void operationImpl() {System.out.println("I'm ConcreteImplementor A");}
}

编写测试类

public class Test {public static void main(String[] args) {// 实现角色AIImplementor imp = new ConcreteImplementorA();// 抽象角色,聚合实现Abstraction abs = new RefinedAbstraction(imp);// 执行操作abs.operation();}}

代码测试,控制台输出:

五、桥接模式优缺点

  • 优点

    • 分离抽象部分及具体实现部分
    • 提高了系统的扩展性
    • 符合开闭原则、合成复用原则
  • 缺点
    • 增加了系统的理解与设计难度
    • 需要正确地识别系统中两个独立变化的维度

设计模式之桥接模式详解相关推荐

  1. 设计模式之桥接模式详解(附应用举例实现)

    文章目录 1 桥接模式介绍 2 桥接模式详解 2.1 桥接模式结构 2.2 桥接模式实现 2.3 桥接模式应用实例 1 桥接模式介绍 毛笔和蜡笔是两种很常见的文具,它们都归属于画笔.假设我们需要大.中 ...

  2. (十四)桥接模式详解(都市异能版) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地 ...

  3. 设计模式之模板方法模式详解

    设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...

  4. 设计模式之门面模式详解

    设计模式之门面模式详解 文章目录 设计模式之门面模式详解 一.什么是门面模式 二.门面模式的应用场景 三.门面模式的角色组成 四.门面模式通用写法 五.门面模式在业务中的应用 六.门面模式优缺点 一. ...

  5. 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  6. 设计模式之策略模式详解

    设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...

  7. 设计模式之工厂模式详解(附应用举例实现)

    文章目录 1 工厂模式介绍 2 工厂模式详解 2.1 简单工厂模式 2.1.1 简单工厂模式结构 2.1.2 简单工厂模式实现 2.1.3 简单工厂模式应用举例 2.2 工厂方法模式 2.2.1 工厂 ...

  8. (十四)桥接模式详解(都市异能版)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地 ...

  9. 设计模式之原型模式详解(附应用举例实现)

    文章目录 1 原型模式介绍 2 原型模式详解 2.1 原型模式结构 2.2 深克隆与浅克隆 2.2.1 浅克隆 2.2.2 深克隆 2.3 原型模式实现 2.3.1 通用实现方法 2.3.2 Java ...

最新文章

  1. pythonffmpeg 推流_Python实现推流直播
  2. JavaWeb 基于Session的用户登陆注销实现
  3. rpm命令选项中文说明
  4. JavaScript的文档窗口事件
  5. IT软件开发 书籍汇总
  6. cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
  7. Android Weekly Notes Issue #230
  8. JavaEE5 Tutorial_JavaBean,JSTL
  9. 特殊权限 set_uid、set_gid、stick_bit,软链接文件,硬链接文件
  10. linux db2v9.7卸载,db2 卸载和安装
  11. R语言入门mac——RStudio安装➕R包安装【附安装链接】
  12. java flv 转swf_swf转flv格式转换器 使用ffmpeg进行视频文件转换成FLV整理
  13. 对话系统 | (4) 任务型对话系统基础
  14. css实现接地气的checkbox框
  15. Guice集成Properties配置
  16. div网页布局(做一个简单网页界面为例)
  17. android绘制半圆弧线_半圆形进度条Android - 绘制半圆
  18. python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
  19. POJ 1723(中位数+连续排列)
  20. applicationContext.xml的头文件

热门文章

  1. 简述python爬虫原理_爬虫原理介绍
  2. java sortedlist 用法_为什么Java中没有SortedList?
  3. 龙渊服务器信息丢失,巨龙之战龙渊旧,龙渊号怎么没有31服务器
  4. 桌面快捷方式图标消失,如何恢复
  5. 关于嵌入式软件工程师的面试题(一)
  6. 江苏泗洪计算机学校怎么样,江苏泗洪中等专业学校
  7. 中职学校计算机专业课程设置,中等职业学校计算机专业课程体系
  8. Android 分享会:Material Design 在 Android 中的应用
  9. CentOS设置密码复杂度方法
  10. 移动互联网时代:如何用手机精细化管理企业?