本文源码:GitHub·点这里 || GitEE·点这里

一、桥接模式简介

1、基础描述

桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。

2、场景问题描述

1)、场景分析

在一个复杂的系统中,消息通知是一个必备模块,一般封装方式主要从下面两个方式入手:

  • 消息类型
用户端消息(user-client)
管理端消息(system-client)
  • 消息接收
邮件发送(email)
短信发送(msg)

2)、场景图解

3)、源码实现

/**
* 桥接模式场景应用
*/
public class C01_InScene {
public static void main(String[] args) {
// 创建具体的实现对象
MsgImplementor implementor = new SendBySMS() ;
// 创建普通的消息对象
AbstractMsg abstractMessage = new UserMsg(implementor);
abstractMessage.sendMessage("您的账户异地登陆", "用户A0001");
// 切换为邮件方式且加急处理
implementor = new SendByEmail() ;
abstractMessage = new AdminMsg(implementor);
abstractMessage.sendMessage("项目上线通知", "运维S0001");
}
}
/**
* 封装消息类型
*/
abstract class AbstractMsg {
// 持有一个实现部分的对象
MsgImplementor impl ;
public AbstractMsg (MsgImplementor impl){
this.impl = impl ;
}
/**
* 发送消息,委派给实现部分的方法
* @param message 要发送消息的内容
* @param toUser 消息的接受者
*/
public void sendMessage (String message, String toUser){
this.impl.send(message, toUser);
}
}
class AdminMsg extends AbstractMsg{
public AdminMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "辛苦的管理员:"+message;
super.sendMessage(message, toUser);
}
}
class UserMsg extends AbstractMsg{
public UserMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "尊敬的用户:" + message ;
super.sendMessage(message, toUser);
}
} /**
* 封装消息发送
*/
interface MsgImplementor {
void send (String message , String toUser) ;
}
class SendBySMS implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("短信通知:"+toUser+";内容:"+message);
}
}
class SendByEmail implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("邮件通知:"+toUser+";内容:"+message);
}
}

二、桥接模式

1、模式图解

2、核心角色

  • 抽象化(Abstraction)角色

抽象化给出的定义,并保存一个对实现化对象的引用。

  • 修正抽象化(RefinedAbstraction)角色

扩展抽象化角色,改变修正父类对抽象化的定义。

  • 实现化(Implementor)角色

这个角色给出实现化角色的接口,但不给出具体的实现。

  • 具体实现化(ConcreteImplementor)角色

这个角色给出实现化角色接口的具体实现。

3、源码封装

abstract class Abstraction {
private Implementor implementor ;
public Abstraction (Implementor implementor){
this.implementor = implementor ;
}
// 实例方法
public void operation (){
implementor.operationImpl();
}
}
class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
//其他的操作方法
public void otherOperation(){
}
}
abstract class Implementor {
// 示例方法,实现抽象部分需要的某些具体功能
public abstract void operationImpl () ;
}
class ConcreteImplementorA extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA.operationImpl()");
}
}
class ConcreteImplementorB extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB.operationImpl()");
}
}

三、Java应用场景

桥梁模式在Java应用中的一个非常典型的例子就是JDBC驱动器。抽象API可以对各种数据库引擎发出SQL指令,并不直接与数据库引擎互动,JDBC驱动器负责这个底层的工作。

JDBC的这种架构,把抽象部分和具体部分分离开来,从而使得抽象部分和具体部分都可以独立地扩展。

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述设计模式(08):桥接模式的更多相关文章

  1. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  2. java设计模式7——桥接模式

    java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...

  3. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  4. php设计模式之桥接模式

    php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...

  5. 设计模式之桥接模式——Java语言描述

    桥接适用于把抽象化和实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦 这种模式设计到一个作为桥接的接口,使得实体类的功能独立 ...

  6. 设计模式之桥接模式(Java语言描述)

    桥接模式定义 將抽象部分与它的具体实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体模式或接口模式. Decouple an abstraction from its imple ...

  7. Java设计模式:桥接模式

    问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何 ...

  8. JAVA开发的23种设计模式之 --- 桥接模式

    桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.    应用场景        实现系统可能有多 ...

  9. Java设计模式应用——桥接模式

    性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用. 采集可以是snmp采集,也可以是ems采集:汇聚可以使storm汇聚,也可以是spark汇聚:入库可以是hdfs入库,也 ...

随机推荐

  1. C++构造函数的几种使用方法

    在C++中,有一种特殊的成员函数,他的名字和类相同,没有返回值,不需要用户显示调用,用户也无法调用,而是在创建对象的时候自动执行. 这种特殊的函数就是构造函数 Constructor 构造函数的名字与 ...

  2. 建议2:注意Javascript数据类型的特殊性---(1)防止浮点数溢出

    1.防止浮点数溢出 二级制的浮点数不能正确地处理十进制的小数,因此 0.1+0.2不等于0.3 num = 0.1+0.2; //0.30000000000000004 这是JavaScript中经常 ...

  3. 设计模式-单例模式code

    package singeton; import java.security.SecureRandom; /** * @author Zero * @since 2019-08-13. * Descr ...

  4. Android 框架布局 FrameLayout

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android=" ...

  5. Visual Studio中相对路径中的宏定义

    $(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添加到 ...

  6. juc-2.1-模拟CAS算法

    package com.wf.zhang.juc; /* * 模拟 CAS 算法 */ public class TestCompareAndSwap { public static void mai ...

  7. 事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器,前15章发布(2019-11-04)

    说明:1.第1版DSP教程发布于2014年末,纪念下:https://www.cnblogs.com/armfly/p/11274826.html2.这几年在信号处理的应用上积累了一些经验,也发现了很 ...

  8. Java面试官:兄弟,你确定double精度比float低吗?

    我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的"程序员":穿着也非常"不拘一格",上半身是衬衣西服,下半身是牛仔裤运动鞋. 我和老刘的感情非常好,每 ...

  9. Java DAO 模式

    转载自https://www.runoob.com/note/27029 DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访 ...

  10. C# 网络编程之简易聊天示例

    还记得刚刚开始接触编程开发时,傻傻的将网站开发和网络编程混为一谈,常常因分不清楚而引为笑柄.后来勉强分清楚,又因为各种各样的协议端口之类的名词而倍感神秘,所以为了揭开网络编程的神秘面纱,本文尝试以一个 ...