正文
Java描述设计模式(08):桥接模式
原
荐
字数 874
阅读 10
收藏 0
Java
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>
本文源码: GitHub·点这里 || GitEE·点这里
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。
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); } }
抽象化给出的定义,并保存一个对实现化对象的引用。
扩展抽象化角色,改变修正父类对抽象化的定义。
这个角色给出实现化角色的接口,但不给出具体的实现。
这个角色给出实现化角色接口的具体实现。
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应用中的一个非常典型的例子就是JDBC驱动器。抽象API可以对各种数据库引擎发出SQL指令,并不直接与数据库引擎互动,JDBC驱动器负责这个底层的工作。
JDBC的这种架构,把抽象部分和具体部分分离开来,从而使得抽象部分和具体部分都可以独立地扩展。
GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent
© 著作权归作者所有
打印
上一篇: SpringBoot2基础,进阶,数据库,中间件等系列文章目录分类
下一篇: SpringCloud基础组件总结,与Dubbo框架、SpringBoot框架对比分析
社区可以使用码云账号登录啦!往后余生,结伴同行
领取条件:在六周年期间绑定码云账号即可领取
粉丝 110
博文 48
码字总数 47256
作品 0
杭州
提问相关文章 最新文章
以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html ...
wc_飞豆
2018/03/16
142
0
book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式2.工厂方法模式...
jayronwang
2014/12/19
281
0
B、结构模式(7 种) 我们接着讨论设计模式,上篇文章我讲完了 5 种创建型模式,这章开始,我将讲下 7 种结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模...
wersdffg
2015/02/15
145
0
参考网址:http://blog.csdn.net/zhangerqing 资源:http://download.csdn.net/detail/zhangerqing/4835830 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用、多数...
青涩的梦
2018/06/26
0
0
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...
只想一个人静一静
2014/02/25
213
2
没有更多内容
加载失败,请刷新页面
加载更多搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......
linjin200
18分钟前
4
0
参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......
Sheav
20分钟前
4
0
v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...
凌兮洛
21分钟前
5
0
Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...
QGlaunch
22分钟前
4
0
作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...
阿里云官方博客
24分钟前
4
0
没有更多内容
加载失败,请刷新页面
加载更多