Java设计模式 —— 桥接模式
10 桥接模式
10.1 桥接模式概述
Bridge Pattern: 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。
桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度,通过桥接模式将这两个维度分离出来,使两者可以独立扩展。
桥接模式结构图如下所示:

10.2 桥接模式实现
10.2.1 抽象类
它通常是抽象类,而不是接口,其中定义了一个实现类接口的对象并维护该对象。
public abstract class Abstraction {
private Implement impl;
public void setImplement(Implement impl) {
this.impl = impl;
}
public void operation();
}
10.2.2 具体类
public class Concrete extends Abstraction {
// 实现父类的抽象方法
public void operation() {
impl.operationImpl();
}
}
10.2.3 实现类接口
public interface Implement {
public void operationImpl();
}
10.2.4 具体实现类
它实现了 Implement 接口,在不同的 ConcreteImplement 中提供操作的不同实现。
public class ConcreteImplementA implements Implement {
public void operationImpl() {
// 具体业务逻辑实现 A
}
}
public class ConcreteImplementB implements Implement {
public void operationImpl() {
// 具体业务逻辑实现 B
}
}
10.2.5 客户端调用类
public class Client {
public static void main(String[] args) {
Abstraction abs = new ConcreteA();
Implement impl = new ImplementA();
abs.setImplment(impl);
abs.operation();
}
}
10.3 结合具体例子理解桥接模式
可能光看上面对桥接模式的理论有点难以理解,下面我门结合具体的例子来解释桥接模式做了什么,这么做的优势在哪里。
例子说明:
某软件系统要求能够显示 JPG、GIF、PNG 等多种格式图片,且能够在 Windows、Linux 等多个操作系统上运行。系统首先将各种格式文件转换为像素矩阵,在不同的操作系统中调用不同的绘制函数来绘制像素矩阵。系统需要较好的扩展性,以便在将来支持更多的图片格式和操作系统。

这个例子就将图片格式与操作系统这两个独立变化的维度分离。如果这两个成员变量都耦合在一个类中,那么要实现上述的扩展则需要 3 * 2 = 6 个子类来实现,而分离出来独立变化则只需要 3 + 2 = 5 个额外的类,当然变化的维度越多,桥接模式的效果则越显著。
10.4 桥接模式优/缺点
桥接模式的优点主要如下:
- 分离抽象接口与其实现部分,使得抽象部分和实现部分可以沿着各自的维度变化
- 桥接模式可以取代多层继承方案,极大地减少子类的个数
- 桥接模式提高了系统的扩展性,增加/删除都不需要修改原有代码,符合开闭原则
桥接模式的缺点主要如下:
- 增加系统的理解与设计难度,因为关联关系建立在抽象层,要求一开始就针对抽象层进行设计
Java设计模式 —— 桥接模式的更多相关文章
- 【设计模式】Java设计模式 - 桥接模式
[设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
- java设计模式——桥接模式
一. 定义与类型 定义:将抽象部分与他的具体实现部分分离,使它们都可以独立的变化,通过组合的方式建立两个类之间的联系,而不是继承 类型:结构性. 二. 使用场景 (1) 抽象和具体实现之间增加更多的灵 ...
- JAVA 设计模式 桥接模式
用途 桥接模式 (Bridge) 将抽象部分与实现部分分离,使它们都可以独立的变化. 桥接模式是一种结构式模式. 结构
- Java设计模式-桥接模式(Bridge)
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时 ...
- java设计模式---桥接模式
桥接模式的目的是把抽象和具体实现分离,其uml类图如下所示: public interface SendMessage { abstract void send(String message,Stri ...
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 跟着ZHONGHuan学习设计模式--桥接模式
转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...
- linkin大话设计模式--桥接模式
linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...
- java设计模式--单列模式
java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...
随机推荐
- python 添加文件模板,默认添加作者时间等必要信息
1.模板设置 配置路径:Setting-Editor-File and Code Templates-Python-Script 2.示例输入 代码如下(示例): #!/usr/bin/env pyt ...
- 如何卸载cdr x8?怎么把cdr x8彻底卸载删除干净重新安装的方法【转载】
标题:如何卸载cdr x8?怎么把cdr x8彻底卸载删除干净重新安装的方法.cdr x8显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎么完全彻底删除清理干净cdr x8各种残留注册表 ...
- 如何安装vm虚拟机软件并用该软件建立虚拟机
一.安装vm虚拟机软件 1.双击打开虚拟机应用程序 找到VM应用程序所在的位置,双击安装 2.根据向导安装 根据提示点击下一步 点击安装之后耐心等待一会,会出现需要输入许可证的的界面,这时候不要关闭界 ...
- DTO的理解
首要的作用,我认为就是减少原生对象的多余参数.包括为了安全,有时候也为了节约流量.例如:密码,你就不能返回到前端.因为不安全. 其次假如说:获取博客列表的时候,也不能返回博客全文吧.顶多就返回标题,i ...
- P2212 Watering the Fields S
题目描述 给定n个点,第i个点的坐标为(xi,yi)(xi,yi),如果想连通第i个点与第j个点,需要耗费的代价为两点的距离.第i个点与第j个点之间的距离使用欧几里得距离进行计算,即:(xi-xj ...
- Unity学习笔记——坐标转换(3)
通过Transform.Translate移动物体 6个重载: public void Translate(float x, float y, float z, [De ...
- BOM的概述及方法
BOM的概述: bom 称为浏览器对象模型(bowser object model),也就意味他可以获取浏览器上的所有内容以及相关的操作.BOM缺乏规范的,存在共有对象来解决这个问题,但是共有对象也存 ...
- (c语言描述 函数递归汉诺塔)
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序 ...
- 007使用IDEA开发
007使用IDEA开发 1.什么叫IDE? 集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调 ...
- 将成员服务器ms1加到AD域中
1.对ms1的ipv4设置,dns对应地址dc1服务器地址 2.修改计算机名,并加入域 重启后 2.以域用户登录方式有两种 1. 2. 检查ms1有没有加入dc1的域中 在dc1