设计模式之桥接模式详解
设计模式之桥接模式详解
文章目录
- 设计模式之桥接模式详解
- 一、什么是桥接模式
- 二、桥接模式的应用场景
- 三、桥接模式的角色组成
- 四、桥接模式通用写法示例
- 五、桥接模式优缺点
一、什么是桥接模式
桥接模式(Bridge Pattern) 也称为桥梁模式、接口模式或者柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现。
二、桥接模式的应用场景
当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适用于以下几种业务场景:
- 在抽象和具体实现之间需要增加更多的灵活性的场景
- 一个类存在两个或多个独立变化的维度,而这两个或多个维度都需要独立进行扩展
- 不希望使用继承,或因为多层继承导致系统类的个数剧增
桥接模式的一个常用场景就是为了替换继承。我们知道继承有很多优点,比如抽象,封装,多态等,父类封装共性,子类实现特性。继承可以很好地帮助我们实现代码复用(封装)的功能,但是同时,这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类是否需要。这说明了继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为,优先使用组合/聚合的方式,而不是继承。
三、桥接模式的角色组成
- 抽象(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 桥接模式介绍 2 桥接模式详解 2.1 桥接模式结构 2.2 桥接模式实现 2.3 桥接模式应用实例 1 桥接模式介绍 毛笔和蜡笔是两种很常见的文具,它们都归属于画笔.假设我们需要大.中 ...
- (十四)桥接模式详解(都市异能版) - 转
作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地 ...
- 设计模式之模板方法模式详解
设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...
- 设计模式之门面模式详解
设计模式之门面模式详解 文章目录 设计模式之门面模式详解 一.什么是门面模式 二.门面模式的应用场景 三.门面模式的角色组成 四.门面模式通用写法 五.门面模式在业务中的应用 六.门面模式优缺点 一. ...
- 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)
0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...
- 设计模式之策略模式详解
设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...
- 设计模式之工厂模式详解(附应用举例实现)
文章目录 1 工厂模式介绍 2 工厂模式详解 2.1 简单工厂模式 2.1.1 简单工厂模式结构 2.1.2 简单工厂模式实现 2.1.3 简单工厂模式应用举例 2.2 工厂方法模式 2.2.1 工厂 ...
- (十四)桥接模式详解(都市异能版)
作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地 ...
- 设计模式之原型模式详解(附应用举例实现)
文章目录 1 原型模式介绍 2 原型模式详解 2.1 原型模式结构 2.2 深克隆与浅克隆 2.2.1 浅克隆 2.2.2 深克隆 2.3 原型模式实现 2.3.1 通用实现方法 2.3.2 Java ...
最新文章
- pythonffmpeg 推流_Python实现推流直播
- JavaWeb 基于Session的用户登陆注销实现
- rpm命令选项中文说明
- JavaScript的文档窗口事件
- IT软件开发 书籍汇总
- cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
- Android Weekly Notes Issue #230
- JavaEE5 Tutorial_JavaBean,JSTL
- 特殊权限 set_uid、set_gid、stick_bit,软链接文件,硬链接文件
- linux db2v9.7卸载,db2 卸载和安装
- R语言入门mac——RStudio安装➕R包安装【附安装链接】
- java flv 转swf_swf转flv格式转换器 使用ffmpeg进行视频文件转换成FLV整理
- 对话系统 | (4) 任务型对话系统基础
- css实现接地气的checkbox框
- Guice集成Properties配置
- div网页布局(做一个简单网页界面为例)
- android绘制半圆弧线_半圆形进度条Android - 绘制半圆
- python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
- POJ 1723(中位数+连续排列)
- applicationContext.xml的头文件