java 桥接模式实现代码
写在前面
桥接模式:将抽象与实现分离,使它们可以独立变化。它是用组合/聚合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
使用场景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 桥接模式实现代码的更多相关文章
- 设计模式:桥接模式及代码示例、桥接模式在jdbc中的体现、注意事项
0.背景 加入一个手机分为多种款式,不同款式分为不同品牌.这些详细分类下分别进行操作. 如果传统做法,需要将手机,分为不同的子类,再继续分,基本属于一个庞大的多叉树,然后每个叶子节点进行相同名称.但是 ...
- java 桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 1)适配器:改变已有的两个接口,让他们相容. 2)桥接模式:分离抽象化 ...
- java 代理模式实现代码
目录 1.静态代理 2.动态代理 1.静态代理 接口类AdminService.java接口 public interface AdminService { void update(); Object ...
- Java桥接模式
定义:将抽象部分与它的具体实现部分分离,使他们都可以独立的变化 通过组合的方式建立两个类之间联系,而不是继承 类型:结构型 适用场景: 抽象和具体实现之间增加更多的灵活性 一个类存在两个(或多个)独立 ...
- php设计模式之桥接模式实例代码
<?php header("Content-type:text/html;charset=utf-8"); abstract class msg{ protected $se ...
- 重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)
作者:小傅哥 博客:https://bugstack.cn - 编写系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么你的代码那么多ifelse 同类的业务.同样的功能, ...
- Java设计模式之(六)——桥接模式
1.什么是桥接模式? Decouple an abstraction from its implementation so that the two can vary independently. 桥 ...
- 【设计模式】Java设计模式 - 桥接模式
[设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
- 桥接模式二(Bridge)
昨天写到了桥接模式的代码实现,今天我们就继续来讲完桥接模式. 有认真看的会发现,昨天的代码实现只是两个维度的变化:哪么有人可能就会问了哪如果我要加多一个维度呢?我要具体到企业的哪个部门,哪我 ...
随机推荐
- PAT (Basic Level) Practice (中文)1017 A除以B (20分)
1017 A除以B (20分) 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数.你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立. 输入格式: 输入在一 ...
- 论文解读丨表格识别模型TableMaster
摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...
- js--数组的 fill() 填充方法详解
前言 我们知道了很多了初始化数组的方法,但是初始化数组之后,数组中的每一项元素默认为 empty 空位占位,如何对数组这些空位添加默认的元素,ES6提供了 fill() 方法实现这一操作.本文总结数组 ...
- NOIP 模拟 $79\; \rm y$
题解 \(by\;zj\varphi\) NOIP2013 的原题 最简单的思路就是一个 bfs,可以拿到 \(70pts\) 75pts #include<bits/stdc++.h> ...
- 2021.7.21考试总结[NOIP模拟22]
终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...
- 虚树 virtual-tree
我们发现,如果一棵树中真正需要处理的点很少,而总共点数很多时,可以只处理那些需要的点,而忽略其他点. 因此我们可以根据那些需要的点构建虚树,只保留关键点. oi-wiki上对虚树的介绍 我们根据一下方 ...
- linux rtl8188eu ap模式 密码错误 disassoc reason code(8)
2018-05-30 14:12:46 于深圳南山科技园 最近有个项目,客户需要通过手机app通过机器wifi热点连接,从而实现对机器的设置及视频的实时预览等各种功能.这两天一直在搞rtl8188eu ...
- 恶意代码分析实战四:IDA Pro神器的使用
目录 恶意代码分析实战四:IDA Pro神器的使用 实验: 题目1:利用IDA Pro分析dll的入口点并显示地址 空格切换文本视图: 带地址显示图形界面 题目2:IDA Pro导入表窗口 题目3:交 ...
- Linux网卡bond模式
Bond模式 交换机配置 mode=0 balance-rr 轮询均衡模式 LACP mode on 强制链路聚合 mode=1 active-backup 主备模式 无 mode=2 balance ...
- echarts 让轴自适应数据为小数整数
echarts 让轴自适应数据为小数整数,以解决y轴数值重复的问题 工作中突然遇到这个问题 试了一下用formatter自适应 ok 在yAxis中提阿尼按键属性 axisLabel 1 axis ...