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

介绍:

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. 适用于多维变化:当一个类有多个独立变化的维度时,可以考虑使用桥接模式。

桥接模式小结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DAY11 软考中级备考笔记】数据结构 查找和排序

数据结构 查找和排序 3月12日 – 天气:晴 1. 顺序查找 顺序查找就是简单的从头一个一个的进行比较,注意它的平均查找长度 2. 折半查找 折半查找和二叉排序树一致: 优点:查找效率很高 缺点:要求必须是循序存储并且表中…

LoadRunner学习:RuntimeSetting、参数化、关联、(unfinished

LoadRunner RuntimeSetting 运行时设置 在Vuser中设置Run-time Settings RunLogic:运行逻辑,决定了脚本真正执行逻辑, Init和End部分代码只能执行一次。决定脚本真正执行逻辑的意思是,在Run中的代码和Number of Iteration决定了…

马斯克放出豪言,他旗下的xAI要把Grok开源了

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

WeiPHP5.0远程代码执行漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 weiphp 是一个开源,高效,简洁的微信开发平台 声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后…

Learn OpenGL 08 颜色+基础光照+材质+光照贴图

我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。物体的颜色为物体从一个光源反射各个颜色分量的大小。 创建光照场景 首先需要创建一个光源,因为我们以及有一个立方体数据,我们只需要进行…

04.JavaScript中的封装和函数

函数 理解函数的封装特性,掌握函数的语法规则 声明和调用 函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势是有利于精简代码方便复用。 声明(定义) 声明&a…

白嫖的学习资源,程序员绝对相见恨晚!

麦瑟尔夫说:厌学是心灵的癌症。 不学而原地踏步则会让你变成大笨蛋,甚至脑子瓦特......(好吧,可以喷了,其实我在危言耸听) 但是!排除鸡汤的洗脑,学习的重要性是不可否认的&#xff…

初学者必会的Python3文件操作

文件操作的步骤: 打开文件 -> 操作文件 -> 关闭文件 切记:最后要关闭文件。 打开文件 文件句柄 open(文件路径, 模式) 指定文件编码 文件句柄 open(文件路径,模式,encodingutf-8) 为了防止忘记关闭文件,可以使用上下文管理器来…

大模型的整体性

大模型在人工智能领域,体现出一种高度的整体性特征。大模型的整体性表现在其能够跨越多种数据模态,统一表示,应用广泛的知识,以统一的方式处理复杂信息,并在多种场景下保持一致和有效的性能。这种整体性可以分为外部和…

PNG图片合成,带手机外观设置,可自定义金额等

PNG图片合成,带手机外观设置,可自定义金额等 软件界面成品显示免责声明 软件界面 成品显示 免责声明 若因使用代码与官方造成不必要的纠纷,本人盖不负责,存粹技术爱好,若侵犯贵公司的权益,请告知&#xff…

数据结构·二叉树(一)

1. 树概念及结构 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,树叶朝下的。 有一个特殊的节点,称为根节点&#…

Redis核心数据结构之压缩列表(二)

压缩列表 压缩列表节点的构成 encoding 节点的encoding属性记录了节点的content属性所保存数据的类型及长度: 1.一字节、两字节或者五字节长,值得最高位为00、01或者10的是字节数组编码:这种编码表示节点的content属性保存着字节数组,数组的长度由编…

【Python】random库

专栏文章索引:Python 原文章:Python中random函数用法整理_python random-CSDN博客 目录 1.random.random() 2.random.uniform(a, b) 3.random.randint(a, b) 4.random.randrange([start], stop[, step]) 5. random.choice() 6. random.shuffle(x[,…

【每日八股】Java基础中面试你必须要掌握问题1

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。## 如何解决浮点数运算的精度丢失问题? BigDecimal 可以解决精度问题的原因在于它是一个精确的十进制数学运算类&…

idea中设置字段唯一,后台做出提示(springboot项目)

在项目中,我们通常需要对某些字段做字段唯一的限制,保证在数据库中该字段对应的值不能出现重复的值,接下来看看怎么做吧~ 数据库中可以同时设置几个字段的unique,就比如用户在进行注册的时候,一个用户只能对应一个电话…

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)

官方文档 Sample Code: from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60:每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…

week07day01(powerbi)

一. Power BI简介 1. 构成部分 power query: 进行简单的数据清洗power pivot : 进行指标计算power view : 进行报表视图 二. Power Query (进行数据清洗) 1. 如何获取数据: 点击获取数据 ——> 选择导入数据的类型——> 会出现 "加载&…

【刷题日志3.4--3.10】

绕过flag关键字od读取&#xff08;脚本&#xff09;空格过滤 [广东强网杯 2021 团队组]love_Pokemon <?php error_reporting(0); highlight_file(__FILE__); $dir sandbox/ . md5($_SERVER[REMOTE_ADDR]) . /;if(!file_exists($dir)){mkdir($dir); }function DefenderBon…

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…

【Android】 ClassLoader 知识点提炼

1.Java中的 ClassLoader 1.1 、ClassLoader的类型 Java 中的类加载器主要有两种类型&#xff0c;即系统类加载器和自定义类加载器。其中系统类 加载器包括3种&#xff0c;分别是 Bootstrap ClassLoader、Extensions ClassLoader 和 Application ClassLoader。 1.1.1.Bootstra…