java设计模式---- 桥接模式

主文章(所有java设计模式的目录)
https://blog.csdn.net/grd_java/article/details/122252696
源码位置
码云:https://gitee.com/yin_zhipeng/design_mode.git
GitHub:
学习设计模式前必须知道的东西
  1. 看待设计模式,要站在更大的角度(代码重用性、可读性、可扩展性、可靠性、程序高内聚,低耦合)来综合考虑看待,而不是功能实现的角度看待,不要觉得实现一个功能没必要这么麻烦
  1. 文章中给出的设计模式类图都是标准的实现方式,并不一定要完全遵守标准,所以只要设计思想符合,一个设计模式有多种实现方式,尤其是看别人源码的时候,不要用标准类图死扣

1. 桥接模式(Bridge Pattern)

手机操作问题,了解类爆炸,以下设计方式,违反单一职责原则
  1. 对于不同手机类型,不同品牌实现操作编程(开机,关机,打电话等)
    在这里插入图片描述
  2. 假设加上一个种类,翻盖式,那么我们就需要再创建一个翻盖式抽象,实现3个品牌
  3. 一个两个还好,如果添加100个种类呢?就会发生类爆炸(类贼多)
    在这里插入图片描述
  4. 上图中,HuaWei类、Vivo类、XiaoMi类,每个手机种类都有3个,有100个种类就需要100个
  5. 我们要保证,就算我们有1000个种类,也只需要各种类,1个,而不是1000个
桥接模式
  1. 将实现与抽象放在两个不同类层次中,使两个层次可以独立改变
  2. 一种结构型设计模式
  3. 基于类的最小设计原则,通过使用封装,聚合和继承等行为让不同的类承担不同的职责。主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展
  4. 通俗理解:手机都有个种类,但是每个品牌的手机都需要彰显自己的与众不同,例如翻盖手机,都能翻盖,但是小米手机是上下翻盖,Vivo手机是左右翻盖,所以具体功能的实现是每个品牌厂商自己实现的,所以我们实际动作,比如打电话,是Vivo或XiaoMi类实际操手的,其它类都只做一些抽象和无关功能的实现
类图:com/yzpnb/design_mode/bridge_pattern/uml/bridge_pattern.puml

在这里插入图片描述

1. 利用桥接模式,解决手机操作的类爆炸问题

类图:com/yzpnb/design_mode/bridge_pattern/uml/Phone.puml

在这里插入图片描述

  1. 桥怎么回事呢?FoldedPhone的call()方法,除了自己的个性实现,还调用了Phone类的call()方法
  2. Phone类的call()方法,实际调用的是Brand接口的call()方法
  3. 接口Brand的call()是个抽象,实际调用工作的,是Vivo和XiaoMi等类的call()方法
  4. 这样就像一个桥一样,所以叫桥接模式
  5. 明显的改观就是,尽管我们有两个种类,Vivo和XiaoMi品牌也都只有一个,就算增加100个种类,品牌个数也不会变
代码:com/yzpnb/design_mode/bridge_pattern/phone
  1. 品牌抽象(行为实现类接口)
    在这里插入图片描述
  2. 品牌实现类(行为具体实现类)
    在这里插入图片描述
    在这里插入图片描述
  3. 种类,维护品牌(组合),就算各品牌,要按照种类生产手机(维护行为实现类接口)
    在这里插入图片描述
  4. 翻盖种类,行为的具体实现类
    在这里插入图片描述
  5. 用户用的时候,觉得是通过翻盖手机打电话,但实际,打电话功能是厂商自己实现的(苹果和安卓手机,都是触碰手机,但是打电话界面是不一样的)
    在这里插入图片描述

2. 源码中用到的桥接模式

JDBC的Driver接口(从桥接模式看),这就是一个接口,而MySql和Oracle都有Driver类,我们不能因为种类不一样,而每一个种类都写一套实现,所以这里使用了桥接模式
  1. 这里的桥接设计模式,和我们上面介绍的标准的实现方式不一样,但是思想对了就行,毕竟java设计模式标准的制定是在java出现很久之后才规定出来的
    在这里插入图片描述
  1. 先看com.mysql.cj.jdbc.Driver,这是Mysql的驱动类
    在这里插入图片描述
  2. 进入DriverManager观看,getConnection方法,看他获取的是什么Connection对象
    在这里插入图片描述
  3. 看看Connection是什么,原来就是一个接口,它下面,是mysql实现的,如果我们引入Oracle的JDBC依赖,你还会看见Oracle的,我们进入ConnectionImpl类看看
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 5.0版本JDBC的类图如下
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值