桥梁模式

简介: 桥梁模式也叫桥接模式,其定义如下: Decouple an abstraction from its implementation so that the two can vary independently.

桥梁模式也叫桥接模式,其定义如下:
Decouple an abstraction from its implementation so that the two can vary independently.
将抽象和实现解耦,使得两者可以独立地变化

桥梁模式的角色:
Abstraction抽象化角色:它的主要职责就是定义出该角色的行为,同时保存一个对实现化该角色的引用,该角色一般是抽象类
Implementor实现化角色:它是接口或者抽象类,定义角色必须的行为和属性
RefinedAbstraction修正抽象化角色:它引用实现化角色对抽象化角色进行修正
ConcreteImplementor具体实现化角色:它实现接口或抽象类定义的方法和属性

抽象角色引用实现角色,或者抽象角色的部分实现是由实现角色完成的

复制代码
//实现化角色
public class Implementor{
    //基本方法 public void doSomething(); public void doAnything(); } //具体实现化角色 public class ConcreteImplementor1 implements Implementor{ public void doSomething(){ } public void doAnything(){ } } public class ConcreteImplementor2 implements Implementor{ public void doSomething(){ } public void doAnything(){ } } //抽象化角色 public abstract class Abstraction{ //定义对实现化角色的引用 private Implementor imp; //月色子类必须实现该构造函数 public Abstraction(Implementor _imp){ this.imp=_imp; } //自身的行为或属性 public void request(){ this.imp.doSomething(); } //获得实现化角色 public Implementor getImp(){ return imp; } } //具体抽象化角色 public class RefinedAbstraction extends Abstraction{ //覆写构造函数 public RefinedAbstraction(Implementor _imp){ super(_imp); } @Override public void request(){ /* * 业务处理 */ super.request(); super.getImp().doAnything(); } } //场景类 public class Client{ public static void main(String[] args){ //定义一个实现化角色 Implementor imp=new ConcreteImplementor1(); //定义一个抽象化角色 Abstraction abs=new RefinedAbstraction(imp); //执行行文  abs.request(); } }
复制代码

桥梁模式的优点:
1.抽象和实现分离
2.优秀的扩充能力
3.实现细节对客户透明
使用场景:
1.不希望或不适用使用继承的场景:例如继承层次过滤,无法更细化设计颗粒等场景,需要考虑使用桥梁模式
2.接口或抽象类不稳定的场景
3.重用性要求较高的场景

桥梁模式的注意事项
桥梁模式的意图还是对变化的封装,尽量把可能变化的因素封装到最细,最小的逻辑单元中,避免风险扩散,发现类的继承有N层时,可以考虑使用桥梁模式

目录
相关文章
|
5月前
数据库系统工程师考点笔记
数据库系统工程师考点笔记
459 0
|
7月前
|
关系型数据库 数据库 RDS
如何恢复误删除的rds实例
如何恢复误删除的rds实例
236 1
|
XML JavaScript Java
技术:Java-Web基础|XML解析(四)之JAXP-dom4j
XML是标记型文档,js 使用 dom 解析标记型文档是根据 html 的层级结构,在内存中分配一个属性结构,把 html 的标签,属性和文本都封装成 document 对象、element 对象,属性对象、文本对象,node 节点对象。「XML」解析技术xml的解析技术:dom 和 sax。
技术:Java-Web基础|XML解析(四)之JAXP-dom4j
|
Android开发
图标提取,一键完成,再也不用截屏抠图了!
图标提取,一键完成,再也不用截屏抠图了!
|
弹性计算
大模型时代如何利用弹性计算服务应对大算力挑战
大模型时代如何利用弹性计算服务应对大算力挑战大模型时代如何利用弹性计算服务应对大算力挑战大模型时代如何利用弹性计算服务应对大算力挑战大模型时代如何利用弹性计算服务应对大算力挑战
111 0
|
存储 块存储
西门子S7-1200不同存储区的寻址方式
S7-1200 CPU提供了全局存储器数据块和临时存储器等,用于在执行用户程序期间存储数据。全局存储器是指各种专用存储区,如输入映像区I区、输出映像区Q区和位存储器M区,所有块可以无限制地访问该存储器。
西门子S7-1200不同存储区的寻址方式
|
安全 区块链 数据安全/隐私保护
LP流动性挖矿是什么意思?LP流动性挖矿系统开发说明及方案
NFT质押LP流动性挖矿是一种新型加密货币挖矿方式,它结合了NFT和LP流动性挖矿的特性。具体来说,用户可以将自己所持NFT代币质押到一个LP流动性池中,同时也需要提供一定数量的流动性代币作为抵押。这样做的优势在于可以获得一定的挖矿奖励,同时还可以享受LP流动性池的盈利。
|
存储
刷新adapte要注意的地方,和adapter使用的流程
刷新adapte要注意的地方,和adapter使用的流程
|
机器学习/深度学习 文字识别 算法
基于Opencv实现车牌图片识别系统
基于Opencv实现车牌图片识别系统
217 0
基于Opencv实现车牌图片识别系统
|
存储 网络协议 IDE
(*长期更新)软考网络工程师学习笔记——Section 11 Linux操作系统简介
(*长期更新)软考网络工程师学习笔记——Section 11 Linux操作系统简介
(*长期更新)软考网络工程师学习笔记——Section 11 Linux操作系统简介