写在前面

桥接模式:将抽象与实现分离,使它们可以独立变化。它是用组合/聚合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

使用场景1:要绘制矩形、圆形、椭圆、正方形,绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,我们可以设计颜色和形状两个变化维度:

我们设计一个抽象化角色"颜色",然后让红色、绿色、蓝色统一继承自"颜色",让矩形、圆形、椭圆、正方形统一继承自一个接口"形状"。"颜色"的构造方法中传入"形状"这个接口,这样"颜色"和"形状"就桥接起来了

使用场景2:手机、电脑、电视都需要接收消息,消息又分为紧急消息、普通消息,这时候我们就可以把"系统"和"消息"抽象出来桥接。如下有具体实现代码

1、桥接模式实例

以不同的系统需要接收不同的消息为例

1.1、消息类

抽象消息类

public abstract class AbstractMessage {
//持有一个实现部分的对象
MessageImplementor impl;
public AbstractMessage(MessageImplementor impl){
this.impl = impl;
}
/**
* 发送消息,委派给实现部分的方法
* @param message 要发送消息的内容
* @param toUser 消息的接受者
*/
public void sendMessage(String message , String toUser){
this.impl.send(message, toUser);
}
}

普通消息

public class CommonMessage extends AbstractMessage {

    public CommonMessage(MessageImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
// 对于普通消息,直接调用父类方法,发送消息即可
super.sendMessage(message, toUser);
}
}

紧急消息

public class UrgencyMessage extends AbstractMessage {

    public UrgencyMessage(MessageImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "加急:" + message;
super.sendMessage(message, toUser);
}
/**
* 扩展自己的新功能,监控某消息的处理状态
* @param messageId 被监控的消息编号
* @return 监控到的消息的处理状态
*/
public Object watch(String messageId) {
// 根据消息id获取消息的状态,组织成监控的数据对象,然后返回
return null;
}
}

1.2、系统类

系统接口

public interface MessageImplementor {
/**
* 发送消息
* @param message 要发送消息的内容
* @param toUser 消息的接受者
*/
public void send(String message , String toUser);
}

手机

public class Phone implements MessageImplementor {

    @Override
public void send(String message, String toUser) { System.out.println("使用系统内短消息的方法,发送消息'"+message+"'给"+toUser);
} }

电脑

public class Pc implements MessageImplementor {

    @Override
public void send(String message, String toUser) {
System.out.println("使用邮件短消息的方法,发送消息'"+message+"'给"+toUser);
} }

1.3、使用

public class Client {

    public static void main(String[] args) {
// 手机发送
MessageImplementor impl = new Phone();
AbstractMessage message = new CommonMessage(impl);
message.sendMessage("加班申请速批--来自手机","李总"); // 电脑发送
impl = new Pc();
message = new UrgencyMessage(impl);
message.sendMessage("加班申请速批---来自电脑","李总");
} }

2、JDBC

在java中jdbc是使用桥接模式实现的

2.1、jdbc连接实例

import java.sql.*;

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException{
// 需要导入mysql-connector-java-8.0.27.jar,数据库test、用户名root,密码root
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user");
ResultSet rs = ps.executeQuery();
if (rs.next()) {
System.out.println("id :"+rs.getInt("id")+",name :"+rs.getInt("id"));
}
rs.close();
ps.close();
}
}

java 桥接模式实现代码的更多相关文章

  1. 设计模式:桥接模式及代码示例、桥接模式在jdbc中的体现、注意事项

    0.背景 加入一个手机分为多种款式,不同款式分为不同品牌.这些详细分类下分别进行操作. 如果传统做法,需要将手机,分为不同的子类,再继续分,基本属于一个庞大的多叉树,然后每个叶子节点进行相同名称.但是 ...

  2. java 桥接模式

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 1)适配器:改变已有的两个接口,让他们相容. 2)桥接模式:分离抽象化 ...

  3. java 代理模式实现代码

    目录 1.静态代理 2.动态代理 1.静态代理 接口类AdminService.java接口 public interface AdminService { void update(); Object ...

  4. Java桥接模式

    定义:将抽象部分与它的具体实现部分分离,使他们都可以独立的变化 通过组合的方式建立两个类之间联系,而不是继承 类型:结构型 适用场景: 抽象和具体实现之间增加更多的灵活性 一个类存在两个(或多个)独立 ...

  5. php设计模式之桥接模式实例代码

    <?php header("Content-type:text/html;charset=utf-8"); abstract class msg{ protected $se ...

  6. 重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)

    作者:小傅哥 博客:https://bugstack.cn - 编写系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么你的代码那么多ifelse 同类的业务.同样的功能, ...

  7. Java设计模式之(六)——桥接模式

    1.什么是桥接模式? Decouple an abstraction from its implementation so that the two can vary independently. 桥 ...

  8. 【设计模式】Java设计模式 - 桥接模式

    [设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  9. 桥接模式二(Bridge)

    昨天写到了桥接模式的代码实现,今天我们就继续来讲完桥接模式.      有认真看的会发现,昨天的代码实现只是两个维度的变化:哪么有人可能就会问了哪如果我要加多一个维度呢?我要具体到企业的哪个部门,哪我 ...

随机推荐

  1. mysql order by语句流程是怎么样的

    order by流程是怎么样的 注意点: select id, name,age,city from t1 where city='杭州' order by age limit 1000; order ...

  2. 【java】【作业】定义课程信息;继承和组合练习

    问题: 定义课程信息类,包含课程编号.课程名称及学生成绩.编程实现对软件工程专业的某班级的所有课程成绩统计,包括平均成绩.最高成绩.最低成绩,并打印成绩等级分布律. 分析 初分析: 父类(课程信息类) ...

  3. Redis使用过程中有哪些注意事项?看看BAT这类的公司是正确使用Redis的!!

    Redis使用过程中要注意的事项 Redis使用起来很简单,但是在实际应用过程中,一定会碰到一些比较麻烦的问题,常见的问题有 redis和数据库数据的一致性 缓存雪崩 缓存穿透 热点数据发现 下面逐一 ...

  4. CentOS 文本编辑器

    目录 1.Nano 1.1.基础命令 1.2.快捷操作 1.3.配置文件 2.Vim 2.1.四大模式 2.2.基础命令 2.3.标准操作 2.4.高级操作 2.5.配置文件 Linux 终端的文本编 ...

  5. 第五课第四周笔记2:Self-Attention 自注意力

    Self-Attention 自注意力 让我们跳进去谈谈transformer的self-attention机制.如果您能了解本视频背后的主要思想,您就会了解变压器网络工作背后最重要的核心思想. 让我 ...

  6. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  7. [no_code]OCR表格处理——功能规格说明书

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 功能规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...

  8. Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作

    Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作 一.背景 二.需求 三.前置条件 四.项目结构 五.网关层代码的编写 1.引入jar包 2.自定义授权管理器 ...

  9. Noip模拟45 2021.8.21

    一定别删大括号,检查是;还是, ceil函数里面要写double,否则根本没用!!!!!!! T1 打表 正解:打表 考场上很难真正把柿子理解着推出来 况且想要理解题意就很难,比如我就理解错了 半猜着 ...

  10. 震惊,hzoi的考试竟然折磨简单,活到爆!

    众所周知,hzoi的考试题非常"简单",那么究竟有多简单呢?最近,一位外国小哥开发出了hzoi的考试竟然折磨简单,活到爆!的方法,这究竟是怎么一回事呢?快和小编一起来看看吧- 满分 ...