Java结构型模式之桥接模式详解

目录
  • 一.介绍
  • 二.场景理解
  • 三.UML类图
  • 四.具体代码
  • 五.优缺点
  • 六.使用场景

一.介绍

桥接模式(Bridge Pattern)属于结构型模式。用于将抽象与其实现解耦,使得二者可以独立变化。桥接模式使用组合/聚合替代继承,从而连接功能层面与实现层面,把强关联转为弱关联之后进行双向扩展

适配器模式可以在抽象层不变的情况下,对实现进行扩展和变化;而桥接模式可以在抽象和实现两个维度独立扩展和变化

二.场景理解

JPA是ORM框架的抽象,或者说是Java提供的持久化标准,而Hibernate与TopLink则是ORM框架的具体实现,而在Hibernate框架下,又有针对一系列数据库厂商的具体实现,图中是以继承的方式表现Hibernate、TopLink框架下不同数据库厂商的行为变化

上图我们将ORM框架数记为N,将数据库厂商数记为M,如果要新增一个ORM框架,就会生成M个子类,如果新增了一个数据库厂商,就要新增N个子类,两个维度不能够独立的进行扩展,而且最终子类的个数是N*M,代码复杂度会指数型增长,可能会造成类爆炸

JDBC是Java提供的访问关系型数据库的一套标准,根据合成复用原则(组合/聚合优先于继承),在JPA中组合了不同数据库厂商的抽象,此时就在功能层面和实现层面建立起了一座桥梁,无论是ORM框架个数还是数据库厂商的个数都可以进行独立的扩展了,而最终子类的个数仅是N+M

三.UML类图

四.具体代码

业务代码

//抽象化角色
public abstract class JPA {
    protected JDBC jdbc;
    protected JPA(JDBC jdbc) {
        this.jdbc = jdbc;
    }
    public abstract void insert();
}
//扩展抽象化角色
class Hibernate extends JPA{
    protected Hibernate(JDBC jdbc) {
        super(jdbc);
    }
    @Override
    public void insert() {
       System.out.println("Hibernate环境");
       jdbc.insert();
    }
}
//扩展抽象化角色
class TopLink extends JPA{
    protected TopLink(JDBC jdbc) {
        super(jdbc);
    }
    @Override
    public void insert() {
        System.out.println("TopLink环境");
        jdbc.insert();
    }
}
interface JDBC{
   void insert();
}
//具体实现化角色
class MySQL implements JDBC{
    @Override
    public void insert() {
        System.out.println("MySQL执行新增操作");
    }
}
//具体实现化角色
class Oracle implements JDBC{
    @Override
    public void insert() {
        System.out.println("Oracle执行新增操作");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        //数据库厂商
        JDBC jdbc = new MySQL();
        //ORM框架
        JPA jpa = new Hibernate(jdbc);
        jpa.insert();
    }
}

五.优缺点

优点

  • 符合开闭原则
  • 符合合成复用原则
  • 抽象与实现分离,扩展能力极强

缺点

  • 组合/聚合关系建立在抽象层,增加系统的理解与设计难度

六.使用场景

  • 当一个系统存在两个独立变化的维度,且这两个维度都需要进行扩展
  • 当一个系统不希望使用继承或因为多层次继承导致类的个数急剧增加

到此这篇关于Java结构型模式之桥接模式详解的文章就介绍到这了,更多相关Java桥接模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java设计模式之桥接模式

    本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的总结. 读者可以拉取完整代码到本地进行学习,实现代码均测试通过后上传到码云,本地源码下载. 一.引出问题 老王和小王去奔驰4S店买车,奔驰4S店的各种品牌型号琳琅满目,老王想试驾奔驰E.小王想试驾奔驰G,并且提出两种奔驰型号的各种颜色都想体验一把,这让店小二犯了难,两两组合就是很多种,4S店压根放不下. 无奈店小二求

  • Java设计模式之桥接模式的示例详解

    目录 定义 案例 需求 方案一 方案二 对比分析 总结 定义 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 案例 需求 通过企业微信和qq的方式给员工发送消息 方案一 定义发送消息的接口 /** * 发送消息的接口 * @author:liyajie * @createTime:2022/2/21 10:33

  • 详解Java设计模式之桥接模式

    目录 一.什么是桥接模式: 二.UML结构图 三.代码实现 四.JDBC源码解析-桥接模式 1.源码分析 2.源码类 3.对 JDBC 的观点 一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果,例如一辆赛车搭配的是硬胎或者是软胎就能够在干燥的马路上行驶,而如果要在下雨的路面行驶,就需要搭配雨胎了,这种根据行驶的路面不同,需要搭配不同的轮胎的变化的情

  • Java设计模式中桥接模式应用详解

    目录 1.桥接(Bridge)设计模式定义 2.桥接设计模式优点以及不足 3.桥接设计的实现思路 4.桥接设计模式示例 5.桥接模式的应用场景 6.桥接设计模式和适配器设计模式对比 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 显示生活中有物品具有多个维度的属性,比如文字有颜色和字体两个维度的差别,汽车有颜色和牌子两个维度的属性等.如果用继承方式,不但对应的子类很多,而且扩展困难.如果用桥接模式就能很好地解决这些问题. 1.桥接(Bridge)设计模式定义

  • Java结构型设计模式之桥接模式详细讲解

    目录 桥接模式 概述 应用场景 优缺点 主要角色 桥接模式的基本使用 创建实现角色 创建具体实现角色 创建抽象角色 创建修正抽象角色 客户端调用 桥接模式实现消息发送 创建实现角色 创建具体实现角色 创建抽象角色 创建修正抽象角色 客户端调用 桥接模式 概述 桥接模式(Bridge Pattern)也称为桥梁模式.接口(Interfce)模式或柄体(Handle and Body)模式,属于结构型模式. 它是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化. 桥接模式主要目的是通过组合的

  • Java设计模式中的桥接模式

    目录 模式介绍 UML类图 桥接模式案例 桥接模式的注意事项和细节 常见的应用场景 模式介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变. 是一种结构型设计模式. Bridge模式基于类的最小设计原则,通过使用封装.聚合及继承等行为让不同的类承担不同的职责.它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展. UML类图 类图说明: Client类:桥

  • Java结构型设计模式中代理模式示例详解

    目录 代理模式 分类 主要角色 作用 静态代理与动态代理的区别 静态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 JDK动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB与JDK动态代理区别 1.执行条件 2.实现机制 3.性能 代理模式 代理模式(Proxy Pattern)属于结构型模式. 它是指为其他对象提供一种代理以控制对这个对象的

  • Java结构型设计模式中建造者模式示例详解

    目录 建造者模式 概述 角色 优缺点 应用场景 基本使用 创建产品类 创建建造者类 使用 链式写法 创建产品类与建造者类 使用 建造者模式 概述 建造者模式(Builder Pattern)属于创建型模式. 它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 简而言之:建造者模式就是使用多个简单的对象一步一步构建成一个复杂的对象. 建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定.如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分

  • Java结构型设计模式之组合模式详解

    目录 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 组合模式 组合模式(Composite Pattern)也称为整体-部分(Part-Whole)模式,属于结构型模式. 它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示,使得客户端对单个对象和组合对象的使用具有一致性. 组合模式一般用来描述整体与部分的关系,它将对象

  • .Net结构型设计模式之桥接模式(Bridge)

    一.动机(Motivation) 在很多游戏场景中,会有这样的情况:[装备]本身会有的自己固有的逻辑,比如枪支,会有型号的问题,同时现在很多的游戏又在不同的介质平台上运行和使用,这样就使得游戏的[装备]具有了两个变化的维度——一个变化的维度为“平台的变化”,另一个变化的维度为“型号的变化”.如果我们要写代码实现这款游戏,难道我们针对每种平台都实现一套独立的[装备]吗?复用在哪里?如何应对这种“多维度的变化”?如何利用面向对象技术来使得[装备]可以轻松地沿着“平台”和“型号”两个方向变化,而不引入

  • Java结构型设计模式之享元模式示例详解

    目录 享元模式 概述 目的 应用场景 优缺点 主要角色 享元模式结构 内部状态和外部状态 享元模式的基本使用 创建抽象享元角色 创建具体享元角色 创建享元工厂 客户端调用 总结 享元模式实现数据库连接池 创建数据库连接池 使用数据库连接池 享元模式 概述 享元模式(Flyweight Pattern)又称为轻量级模式,是对象池的一种实现.属于结构型模式. 类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能.享元模式提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝试重用

  • Java结构型设计模式之适配器模式详解

    目录 适配器模式 分类 应用场景 优缺点 主要角色 类适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 对象适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 接口适配器 创建目标角色(Target) 创建源角色(Adaptee) 创建适配器(Adapter) 客户端调用 适配器模式 适配器模式(Adapter Pattern)又叫做变压器模式,属于结构型设计模式. 它的功能是将

  • .Net结构型设计模式之代理模式(Proxy)

    目录 一.动机(Motivate) 二.意图(Intent) 三.结构图(Structure) 四.模式的组成 五.代理模式的分类: 六.代理模式的具体实现 七.代理模式的实现要点: 1.代理模式的优点: 2.代理模式的缺点: 3.代理模式的使用场景: 八..NET 中代理模式的实现 九.总结 一.动机(Motivate) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦.如何在不失去

  • Java设计模式之策略模式定义与用法详解

    本文实例讲述了Java策略模式定义与用法.分享给大家供大家参考,具体如下: 一. 定义: 定义一系列算法,把他们一个一个封装起来,并且使他们可以相互替换. 二. 优点: (1)上下文(Context)和具体策略(ConcreteStrategy)是松耦合关系,因此上下文只需要知道他要使用某一个实现  Strategy接口类的实例,但不需要知道是哪个类. (2)策略模式满足开闭原则,当增加新的具体类时,不需要修改上下文类的代码,上下文即可以引用新的具体策略的实例. 三. 实例: 下面就通过一个问题

  • .Net结构型设计模式之组合模式(Composite)

    目录 一.动机(Motivate) 二.意图(Intent) 三.结构图(Structure) 四.模式的组成 五.组合模式的具体代码实现 1.透明式的组合模式 2.安全式的组合模式 六.组合模式的实现要点: 组合模式的优点: 组合模式的缺点: 在以下情况下应该考虑使用组合模式: 七..NET 中组合模式的实现 一.动机(Motivate) 在我们的操作系统中有文件夹的概念,文件夹可以包含文件夹,可以嵌套多层,最里面包含的是文件,这个概念和“俄罗斯套娃”很像.当然还有很多的例子,例如我们使用系统

随机推荐