Java描述设计模式(08):桥接模式
Java描述设计模式(08):桥接模式
原创知了一笑2019-08-23 07:00:00
写在前面
推荐阅读:
源码地址:
一、桥接模式简介
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、核心角色
1、抽象化(Abstraction)角色 抽象化给出的定义,并保存一个对实现化对象的引用。2、修正抽象化(RefinedAbstraction)角色 扩展抽象化角色,改变修正父类对抽象化的定义。3、实现化(Implementor)角色 这个角色给出实现化角色的接口,但不给出具体的实现。4、具体实现化(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的这种架构,把抽象部分和具体部分分离开来,从而使得抽象部分和具体部分都可以独立地扩展。
收藏
举报
12 条评论
赞 (0)