设计模式之—— 桥接模式 Bridge
定义
将抽象与实现分离,使它们可以独立变化。
他是用 组合关系
代替 继承关系
,从而降低了抽象和实现两个维度的耦合度。
结构和实现
桥接模式包含以下角色:
- 抽象化角色:定义抽象类,并包含一个对实现化对象的引用;
- 扩展抽象化角色:是抽象化角色的子类,实现父类中的业务方法,调用实现化角色的方法;
- 实现化角色:定义接口,供扩展抽象化角色调用;
- 具体实现化角色:给出具体实现。
package bridge;public class BridgeTest {public static void main(String[] args) {Implementor imple = new ConcreteImplementorA();Abstraction abs = new RefinedAbstraction(imple);abs.Operation();}
}//实现化角色
interface Implementor {public void OperationImpl();
}//具体实现化角色
class ConcreteImplementorA implements Implementor {public void OperationImpl() {System.out.println("具体实现化(Concrete Implementor)角色被访问");}
}//抽象化角色
abstract class Abstraction {protected Implementor imple;protected Abstraction(Implementor imple) {this.imple = imple;}public abstract void Operation();
}//扩展抽象化角色
class RefinedAbstraction extends Abstraction {protected RefinedAbstraction(Implementor imple) {super(imple);}public void Operation() {System.out.println("扩展抽象化(Refined Abstraction)角色被访问");imple.OperationImpl();}
}
应用
当一个类内部具备两种或 多种变化维度
时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。
桥接模式的一个常见使用场景就是替换继承。我们知道,继承拥有很多优点,比如,抽象、封装、多态等,父类封装共性,子类实现特性。继承可以很好的实现代码复用(封装)的功能,但这也是继承的一大缺点。
因为父类拥有的方法,子类也会继承得到,无论子类需不需要,这说明继承具备强侵入性(父类代码侵入子类),同时会导致 子类臃肿 。因此,在设计模式中,有一个原则为优先使用 组合/聚合
,而不是继承。
很多时候,我们分不清该使用继承还是组合/聚合或其他方式等,其实可以从现实语义进行思考。因为软件最终还是提供给现实生活中的人使用的,是服务于人类社会的,软件是具备现实场景的。当我们从纯代码角度无法看清问题时,现实角度可能会提供更加开阔的思路。
设计模式之—— 桥接模式 Bridge相关推荐
- 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)
如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...
- 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)
文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...
- 设计模式之桥接模式(Bridge)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 设计模式--桥接模式(Bridge)
设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...
- 设计模式(16):结构型-桥接模式(Bridge)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- c++桥接模式bridge
c++桥接模式bridge 概念 角色和职责 适用于 案例 概念 Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不 ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- android 桥梁模式,【设计模式】桥接模式
本文主要介绍:桥接模式概念和用法. 模式背景 生活中,我们如果一个笔有三种型号:大,中,小.颜色一共有M种.如果需要所有型号都有相对应的颜色,那么就需要3*M只笔.但是如果我们转换一下:M种颜色代表M ...
最新文章
- R语言tidyr包separate()函数实战详解:一列裂变为多列
- 使用ssh-keygen生成私钥和公钥
- js 获取鼠标在画布的位置_使用faceapi.js轻松将面部识别添加到你的应用程序
- Elasticsearch搜索引擎:ES的segment段合并原理
- Python数据结构————二叉查找树的实现
- 22 年过去了,Java 依然是开发者最爱的编程语言!
- linux cut 命令详解
- 深度学习笔记_ RestNet-50
- linux下的PDF阅读器
- Python正则表达式(一看就懂)
- 深度解析,马斯克最新发射的先进火箭
- 程序员常用资源工具集合(建议收藏)
- 通过ping检测网络故障的典型次序
- 爱乐乐益生菌有效解决宝宝从小慢性湿疹
- php语言开始和结束分别为,PHP语言参考
- 轩小陌的Python笔记-day08 模块一总结
- Oracle 数据库学习
- CATIA CAA二次开发专题(八)---自定义特征模型
- 为什么那么多人想开发一元夺宝类app?
- STM32F10X SPI操作flash MX25L64读写数据