桥接设计模式 java_Java描述设计模式(08):桥接模式

本文介绍了桥接模式的概念,通过消息通知系统的案例展示了如何使用该模式,将消息类型和发送方式分离,实现了抽象化与实现化的独立扩展。同时,提供了Java代码示例,进一步解释了桥接模式的结构和工作原理,并提到了在JDBC驱动中的应用。
摘要由CSDN通过智能技术生成

一、桥接模式简介

1、基础描述

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

2、场景问题描述

1)、场景分析

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

消息类型

用户端消息(user-client)

管理端消息(system-client)

消息接收

邮件发送(email)

短信发送(msg)

2)、场景图解

a8b115c1fabb8be9131cca0476916012.png

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、模式图解

487106da03859e3224f8ba697d5d49d9.png

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驱动器负责这个底层的工作。

c8182937888696446b46543105e20d1a.png

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

四、源代码地址

GitHub·地址

https://github.com/cicadasmile/model-arithmetic-parent

GitEE·地址

https://gitee.com/cicadasmile/model-arithmetic-parent

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值