java 桥梁模设计,Java设计模式学习篇(九)桥接设计模式
桥接模式(Bridge Pattern)就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。桥接设计模式的类图如下所示:
定义一个抽象类Abstraction,持有Implementor接口。然后接口的具体实现类ConcreteImplementA和ConcreteImplementB具体实现。
下面我们假设实现一个简单的桥接设计模式案例。类图如下所示:
(1)定义Sourceable接口
为了命名规范,我们Sourceable接口写成ISourceable;
(2)实现ISourceable接口的实现类
(3)定义Bridge抽象类
(4)absBridge抽象类的具体实现类
(5)测试类
总结:
桥接设计模式其实摆脱了继承关系体系,通过多态的方式,具体的Bridge实现类中调用父类(抽象类)中的method方法,而该抽象类通过持有接口的引用,调用接口的method方法,而接口中的method方法由具体子类实现,因此传入什么实现类,就调用哪个实现类的method方法。
桥接设计模式的优点就是类间解耦,Sourceable接口的具体实现类也可以继续扩展下去。本例中的absBridge类似于JDBC中的DriverManager,Sourceable的具体实现类就类似于MySQL、ORACLE的驱动器。
思考1:谈到桥接模式,有必要说说类的继承有什么优缺点?
其实继承的优点有很多,可以把公共的方法或属性抽取,父类封装共性,子类实现特性,这是继承的基本功能。
那么继承的缺点有吗?有,强关联关系,父类有个方法,你子类也必须有这个方法,是不可选择的,那这会带来扩展性的问题,我举个简单的例子来说明这个问题:父(Father)类有一个方法A,子(Son)类继承了这个方法,然后子子(Grandson)类也继承了这个方法,问题是突然有一天子(Son)类要重写父类的这个方法,他敢做吗?绝对不敢!子子可是要用从父类(Father)继承过来的方法A,你修改了,那就要修改Son和GrandSon之间的关系,那这个风险就大了去。
今天讲的这个桥梁模式就是这一问题的解决方法,桥梁模式描述了类间弱关联关系,还说上面的那个例子,Fater类完全可以把可能会变化的方法放出去,Son子类要有这个方法很简答,桥梁搭过去,获得这个方法,GrandSon也一样,即使你Son子类不想使用这个方法了,也没关系,对GrandSon不产生影响,它不是从你Son中继承来的方法!
java 桥梁模设计,Java设计模式学习篇(九)桥接设计模式相关推荐
- java 堆内存结构_JVM内存结构、Java内存模型和Java对象模型
JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...
- java记事本课程设计,java记事本课程设计
java记事本课程设计 一. 设计内容和要求1. 设计一个具有 GUI 界面的记事本 含有简单的文字编辑功能 如 剪切.复制.粘贴.删除 还能实现保存.另存为.设置字体和颜色等功能.2. 本程 ...
- java 树结构递归设计,java实现递归树形结构
数据结构递归树,数据结构递归算法,数据结构递归,数据结构递归运算,考研数据结构考递归,数据结构递归回溯,js递归树形数据结构,数据结构分治,递归变非递归用什么数据结构...... 通过函数递归调用来实 ...
- Java设计模式(十五):桥接设计模式
1. 应用场景 假如你正在为一个新的人体工学且友好的电视遥控器编程.你要使用好的OO技能,让所有的遥控器都基于相同的抽象,对此抽象又做出不同的实现-每部不同型号的电视机都有自己的遥控器的实现. 2. ...
- 【我的设计模式学习笔记】洞察设计模式的底层逻辑
PS: 本文转载于:https://developer.aliyun.com/article/783549 简介 设计模式是开发同学经常聊到的话题,也经常被用到实际的开发项目中,熟练的人可以做到信手拈 ...
- 设计模式学习,23种设计模式详解:概述
设计模式学习:概述 首先,别把程序设计不当设计! 程序的框架就是建筑物的骨架,内部实现不过是装修改造.只要骨架设计没有问题,装修起来也是得心应手.一个糟糕的程序框架,对于接下来的Debug和程序的更新 ...
- 基于java互助平台设计_学生学习交流互助社区系统的设计与实现(MySQL)
学生学习交流互助社区系统的设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文15000字,程序代码,MySQL数据库) 学生互助社区(Help) 使用Java 编程语 ...
- java数据类型转换方向_java基础学习篇02(数据类型转换和基本面试题)
JAVA基本数据类型转换 java中的数据类型,分为,引用数据类型和基本数据类型.基本数据类型有8中 整型:byte 8位 . short 16位 .int 32位 .long 64位. (8位=1个 ...
- java自动违例设计,java学习记录(二):java的违例控制机制
1 产生一个违例时,首先按照与创建java对象一样的方法创建违例对象:在内存"堆"里,使用new 来创建.随后停止当前执行路径,然后从当前环境中释放违例句柄.此时,违例控制机制会接 ...
最新文章
- 【framework】spring3-mvc实例-信息转换
- 微型计算机分析,微机原理练习题分析
- Appium 常见API 四(三种等待方式)
- Mac中搭建Kubernetes
- python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
- toast弹窗_Android 开发(一):Toast弹窗与获取控件的值
- postgresql 数据库
- 微信官方回应iOS 13.2频繁杀后台问题:建议先不升级
- STM32工作笔记0052---串口通信原理--UART
- python读取dat文件并保存为Excel格式
- COMSOL案例内容,有需要的了解下!
- 编程机器人考级证书有用吗_机器人编程有等级考试吗?
- 《OpenGL编程指南(原书第9版)》——第3章 3.0OpenGL绘制方式
- (一)市场调查大赛系列——市场调查研究选题
- Python实现逆Radon变换——直接反投影和滤波反投影
- 卸载360天擎-奇安信
- DataGrip 连接MySQL 找不到需要的schemas
- PDA手持终端扫描条码开单打印一体 结合后台电脑系统 数据同步交互解决方案
- Keil_uvision_4基本使用教程
- 计算机系统基础实验——数据的机器级表示
热门文章
- FFmpeg 源代码:avcodec_find_encoder()和avcodec_find_encoder_by_name()
- 网易视频云:分布式转码服务高可用浅析
- STL:transform
- centos7 升级curl版本
- Gitlab 10.1.4 (汉化版) for CentOS 7.4安装
- go 分段锁ConcurrentMap,map+读写锁,sync.map的效率测试
- 异常处理——上传文件到HDFS,put: `.': No such file or directory
- Redis实战(二):Redis 的 String 类型 bitmap
- java中wait和sleep的区别
- PAT甲级 -- 1005 Spell It Right (20 分)