写在前面

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

使用场景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. .NET下使用ufun函数取CAM操作的进给速度

    UF_PARAM_ask_subobj_ptr_value,这个函数在封装的时候,给了很大一个坑啊. NXOpen.UF.UFParam.AskSubobjPtrValue(ByVal param_t ...

  2. Coursera Deep Learning笔记 结构化机器学习项目 (下)

    参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article ...

  3. Noip模拟77 2021.10.15

    T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...

  4. AGC019F

    题目大意 $n$ + $m$ 个问题,其中$n$ 个答案是$YES$,$m$个是$NO$的,你依次答题,每答一道,就可以立刻知道这道题的答案,求在最优策略下答错次数的期望,对$998244353$取模 ...

  5. EasyX安装教程

    Easyx是什么 就是一款可以在Windows里让你的C++程序里显示图片等的工具. 注意:EasyX不支持Linux.MacOS.不过还有Qt等可以选择. 安装VC/VS Easyx只支持Visua ...

  6. [转]DDR相关的一些基础知识

    ODT ( On-DieTermination ,片内终结)ODT 也是 DDR2 相对于 DDR1 的关键技术突破,所谓的终结(端接),就是让信号被电路的终端吸 收掉,而不会在电路上形成反射, 造成 ...

  7. 第02课 OpenGL 多边形

    你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形.也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形.读完了这一课,你 ...

  8. 【java设计模式】(10)---模版方法模式(案例解析)

    一.概念 1.概念 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式. 它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 ...

  9. Android Studio 查看SQLite数据库存储位置及文件

    前言: 之前开发的一个记账本APP,用的是SQLite数据库,会有一些网友问如何查看数据库,这篇博文对此进行一个说明. 操作: 1.通过DDMS(Dalvik Debug Monitor Servic ...

  10. N 种仅仅使用 HTML/CSS 实现各类进度条的方式

    本文将介绍如何使用 HTML/CSS 创建各种基础进度条及花式进度条及其动画的方式,通过本文,你可能可以学会: 通过 HTML 标签 <meter> 创建进度条 通过 HTML 标签 &l ...