桥接模式以及在JDBC源码剖析

news2024/12/23 6:42:12

介绍:

1、桥接模式是指:将实现和抽象放在两个不同类层次中,使两个层次可以独立改变
2、是一种结构型设计模式
3、Bridge模式基于类的最小设计原则,通过使用封装、聚合以及继承等行为让不同的类承担不同的职责。
4、特点:把抽象与行为实现分离开,从而保持各部分的独立性以及应对它们的功能扩展

例子

package com.pxl.testinterface.bridge;
​
// 手机品牌接口
public interface Brand {
    void open();
    void close();
    void call();
}
​
// 具体的手机品牌实现
class Apple implements Brand {
    @Override
    public void open() {
        System.out.println("Apple phone is opening");
    }
​
    @Override
    public void close() {
        System.out.println("Apple phone is closing");
    }
​
    @Override
    public void call() {
        System.out.println("Apple phone is calling");
    }
}
​
// 具体的手机品牌实现
class Samsung implements Brand {
    @Override
    public void open() {
        System.out.println("Samsung phone is opening");
    }
​
    @Override
    public void close() {
        System.out.println("Samsung phone is closing");
    }
​
    @Override
    public void call() {
        System.out.println("Samsung phone is calling");
    }
}
​
// 手机抽象类
abstract class Phone {
    protected Brand brand;
​
    public Phone(Brand brand) {
        this.brand = brand;
    }
​
    public void open() {
        brand.open();
    }
​
    public void close() {
        brand.close();
    }
​
    public void call() {
        brand.call();
    }
}
​
// 具体的手机实现
class FoldedPhone extends Phone {
    public FoldedPhone(Brand brand) {
        super(brand);
    }
​
    public void open() {
        super.open();
        System.out.println("FoldedPhone is opening");
    }
​
    public void close() {
        super.close();
        System.out.println("FoldedPhone is closing");
    }
​
    public void call() {
        super.call();
        System.out.println("FoldedPhone is calling");
    }
}
​

测试:

package com.pxl.testinterface.bridge;
​
public class BridgePatternExample {
    public static void main(String[] args) {
        Brand apple = new Apple();
        Phone foldedPhone = new FoldedPhone(apple);
        foldedPhone.open();
        foldedPhone.call();
        foldedPhone.close();
​
        Brand samsung = new Samsung();
        Phone foldedPhone2 = new FoldedPhone(samsung);
        foldedPhone2.open();
        foldedPhone2.call();
        foldedPhone2.close();
    }
}

类图分析:

桥接模式在JDBC源码剖析

总结

个人理解:将桥接模式理解为一种将抽象部分和具体实现部分分离开的设计模式。桥接模式通过对象间的组合关系,而不是继承关系,来实现抽象部分和实现部分的解耦。(抽象和具体分开)

SpringMVC的三层架构中,service接口和serviceImpl也是运用了这种桥接思想。

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化而互不影响。桥接模式通过对象间的组合关系,而不是继承关系,来实现抽象部分和实现部分的解耦。

桥接模式的结构
  • Abstraction(抽象部分):定义抽象类或接口,并包含一个对实现部分的引用。

  • Refined Abstraction(扩充抽象部分):扩展抽象部分的功能,可以继续定义自己的方法。

  • Implementor(实现部分):定义实现类接口,供具体实现部分继承。

  • Concrete Implementor(具体实现部分):实现实现部分接口的具体类。

桥接模式的优点
  1. 解耦抽象和实现:桥接模式可以将抽象部分和实现部分独立开来,它们可以独立变化而互不影响。

  2. 扩展性良好:桥接模式通过对象组合而不是继承,可以轻松添加新的抽象部分和实现部分。

  3. 隐藏实现细节:桥接模式可以隐藏实现部分的细节,对客户端透明,降低了系统的复杂度。

桥接模式的缺点
  1. 增加类的个数:桥接模式需要定义抽象部分和实现部分的类,可能会增加系统中的类的数量。

  2. 增加代码复杂度:桥接模式在一定程度上增加了系统的复杂度,对于简单的系统可能显得繁琐。

桥接模式的特点
  1. 抽象和实现分离:桥接模式将抽象部分和实现部分分离,使得它们可以独立变化。

  2. 组合优于继承:桥接模式通过对象组合来代替继承,提高了系统的灵活性。

  3. 适用于多维变化:当一个类有多个独立变化的维度时,可以考虑使用桥接模式。

桥接模式小结

桥接模式适用于需要抽象部分和实现部分独立变化的场景,能够提高系统的灵活性和可维护性。

其优点在于解耦和扩展性强,但也存在一定的缺点,需要根据具体情况来选择是否使用桥接模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1511251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【智能算法】樽海鞘群算法(SSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2017年,Mirjalili受到樽海鞘集群行为启发,提出了樽海鞘群算法(Salp Swarm Algorithm, SSA)。 2.算法原理 2.1算法思想 樽海鞘集群是领导者-追随者类型算法,整体…

基于SpringBoot的“医院信管系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“医院信管系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 功能结构图 系统首页界面图 用户注册界面图 医生…

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关(XD-COPNm20)在智能领域,变流器的应用非常广泛,变流器一般会采用CANopen协议。现场采用台达的变流器(支持CANopen协议)作为CANopen从站,S7-1500系列PLC做主站,…

软件设计不是CRUD(14):低耦合模块设计理论——行为抽象与设计模式(上)

是不是看到“设计模式”四个字,各位读者就觉得后续内容要开始讲一些假大空的内容了?各位读者是不是有这样的感受,就是单纯讲设计模式的内容,网络上能找到很多资料,但是看过这些资料后读者很难将设计模式运用到实际的工作中。甚至出现了一种声音:设计模式是没有用的,应用…

Python安装第三方库

前言:大部分时候我们都是使用pip install去安装一些第三方库,但是偶尔也会有部分库无法安装(最典型的就是dlib这个库),需要采取别的方法解决,这里做笔记记录一下。 使用国内镜像源安装 因为pypi的服务器在…

Java后端八股文之Redis

文章目录 1. Redis是什么?2. Redis为什么这么快?3. 为什么要使用缓存?4. Redis几种使用场景:5. Redis的Zset底层为什么要使用跳表而不是平衡树、红黑树或者B树?6.Redis持久化6.1 什么是RDB持久化6.1.1RDB创建快照会阻塞…

大数据开发-FLUME安装部署与实战案例

文章目录 前言安装部署配置修改案例:采集文件内容上传至HDFS案例:采集网站日志上传HDFS前言 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简…

es 查询案例分析

场景描述: 有这样一种场景,比如我们想搜索 title:Brown fox body:Brown fox 文章索引中有两条数据,兔子和狐狸两条数据 PUT /blogs/_bulk {"index": {"_id": 1}} {"title": "…

Oracle Primavera P6 数据库升级

前言 为了模拟各种P6测试,我常常会安装各种不同版本的p6系统,无论是P6服务,亦或是P6客户端工具Professional,在今天操作p6使用时,无意识到安装在本地的P6 数据库(21.12)出现了与Professional软…

对于stm32中printf函数的移植方法

一、准备工作 使用printf之前需要先打开工程选项,把use microLIB选项打开。microlib是keil为嵌入式平台优化的一个精简库,本文使用到的printf将会用到这个microlib。 二、对printf进行重定向 将printf打印的东西输出到串口,由于printf默认输…

关于分布式分片,你该知道的事儿

关于分布式分片,你该知道的事儿 前言一、关于分片方式的那些事儿1.1 按照Hash划分1.2 按照区间范围划分1.3 按照数据量划分1.4 来些例子1.4.1 Redis的分片划分1.4.2 Mongo的分片划分 二、关于分区再平衡的那些事儿2.1 基于固定分片数量2.2 基于动态分片数量2.3 基于…

让生活更加精致的APP?

晚上好,今天博主来介绍几款帮助你条理生活的APP,让你的生活更加精致,充满仪式感。 一.格志日记 一款以“格子”的方式记录日记的APP,非常简单明了,用户可以依据自己的喜好,来自由定义或者删除格…

初阶数据结构之---堆的应用(堆排序和topk问题)

引言 上篇博客讲到了堆是什么,以及堆的基本创建和实现,这次我们再来对堆这个数据结构更进一步的深入,将讲到的内容包括:向下调整建堆,建堆的复杂度计算,堆排序和topk问题。话不多说,开启我们今…

Python面向对象——程序架构

需求 创建图形管理器 -记录多种图形(圆形、矩形.) --提供计算总面积的方法, 要求:增加新图形,不影响图形管理器 测试: 创建图形管理器,存储多个图形对象。 通过图形管理器,调用计算总面积方法 思路 ​​​​​​​ 代码 # ------…

C# SM2加解密 ——国密SM2算法

SM2 是国家密码管理局组织制定并提出的椭圆曲线密码算法标准。 本文使用第三方密码库 BouncyCastle 实现 SM2 加解密,使用 NuGet 安装即可,包名:Portable.BouncyCastle,目前最新版本为:1.9.0。 using Org.BouncyCastl…

SpringBoot中MD5使用

SpringBoot中MD5使用 新建md5类 public final class MD5 {public static String encrypt(String strSrc) {try {char[] hexChars {0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f};byte[] bytes strSrc.getBytes();MessageDigest md MessageDigest.getInstance("MD5…

设计模式前置了解uml图

在开发前,会进行系统的设计,而数据模型的设计大多通过 UML 类图实现。为了在 UML 类图中清晰地表达类之间的关系,需要对类之间的关系有一定的认识,并且了解相关的表达符号。 类之间的关系有以下几种: 组合 聚合 关联…

IPC:管道

一、管道的概念 1.原理 在进程3G~4G的内核空间中,创建一个特殊的文件(管道),管道的数据直接保存在内存中。 2.特性 1)管道可以看成是一个特殊的文件,一般的文件存储在外存中,而管道内容是存储…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意:ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200