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: /** * 单列模式需要满足 ...
随机推荐
- 软件工程作业:个人项目—wc项目
软件工程作业:个人项目-WC项目 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程 ...
- PC端钉钉扫码登录,报错情况合集
"对不起 你无权限查看该页面 redirect_url不能为空" 原因: 1. 只对redirect_url编码,而生成二维码时需要对整个gotoUrl进行编码 2. appid参 ...
- (十三).CSS3中的变换(transform),过渡(transition),动画(animation)
1 变换 transform 1.1 变换相关 CSS 属性 CSS 属性名 含义 值 transform 设置变换方式 transform-origin 设置变换的原点 使用关键字或坐标设置位置 t ...
- PriorityQueue&&Function overload
用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue #include <iostream> #include ...
- AI技术网关如何用于安全生产监测?有什么优势?
现代工业生产和运营的规模越来越庞大.系统和结构越来越复杂,现场的风险点多面广,给作业一线的安全监管带来极大的挑战.针对工地.煤矿.危化品.加油站.烟花爆竹.电力等行业的安全生产监管场景,可以借助AI智 ...
- 微信支付服务商api对接
引入官方sdk <!--微信v3支付sdk {https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient}--> < ...
- C#测试web服务是否可用(转)
转摘:http://www.cnblogs.com/xienb/p/3443282.html winform客户端经常需要调用webservice或者WCF进行数据交互,但是远程服务有可能不存在或者服 ...
- Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found
Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found 解决方法 ...
- 解决ssh $host jps bash: jps: command not found 问题
问题描述 使用 ssh $host jps 命令报错,连本机也会有这样的情况,但是分开使用并没有问题,即ssh $host下执行jps命令并不会报错. 原因 因为ssh远程连接到服务器的环境变量中不包 ...
- json.dumps和json.loads,get和post
一.json.dumps()和json.loads()概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) json.dumps() ...