桥接模式
- 基本介绍
- 桥接模式(Bridge 模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
- 是一种结构型设计模式(基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责)。
- 特点:把抽象(Abstraction)与行为实现(Implementation)分离开来,解耦合,保持各个功能的独立性和可扩展性
- 例题:
对不同的学科进行归类调用:
原始的解决方案:
分析:
-
扩展性问题(类爆炸),倘若我们要是再增加一个学科类,同样还需要增加对应的具体学科下的项目
-
违反了单一职责原则,当我们增加一个样式时,要同时调整增加其他的类,无形中增加了代码维护成本.
-
解决方案:
Study接口类:
package Bridge;
public interface Study {
void open();
void close();
}
具体的实现子类:1.Java类
package Bridge;
public class Java implements Study{
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("Javaopen");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("Javaclose");
}
}
2.Jdbc类:
package Bridge;
public class Jdbc implements Study{
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("Jdbcopen");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("TJdbcclose");
}
}
学科类:project
package Bridge;
public abstract class Project {
private Study b;
public Project(Study b) {
super();
this.b = b;
}
public void open() {
b.open();
}
public void close() {
b.close();
}
}
学科类对应的子类(赋予具体学科分类)
package Bridge;
public class P1 extends Project {
public P1(Study b) {
super(b);
// TODO Auto-generated constructor stub
}
public void open() {
super.open();
System.out.println("数据库");
}
public void close() {
super.close();
System.out.println("数据库");
}
}
package Bridge;
public class P2 extends Project{
public P2(Study b) {
super(b);
// TODO Auto-generated constructor stub
}
public void open() {
super.open();
System.out.println("后端");
}
public void close() {
super.close();
System.out.println("后端");
}
}
最终客户端调用测试:Client
package Bridge;
public class Client {
public static void main(String[] args) {
Project p = new P1(new Jdbc());
p.open();
p.close();
System.out.println("=============");
Project d = new P1(new Java());
d.close();
d.open();
System.out.println("=============");
Project s = new P2(new Jdbc());
s.close();
s.open();
}
}
上图具体类分析:
Client 类:桥接模式的调用者抽象类(Project) :维护了 Study 即它的实现类 Java,Jdbc…, 二者是聚合关系
Project充当桥接类
P1/P2: 抽象类的子类
Study : 行为实现类的接口
Java/Jdbc :行为的具体实现类
UML 图:这里的抽象类和接口是聚合的关系,其实调用和被调用关系
注意事项
-
实现了抽象和实现部分的分离,提高了系统分层设计的灵活性,从而产生更好的结构化系统。
扫描二维码关注公众号,回复: 11869187 查看本文章 -
对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
-
桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
-
桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设 计和编程
-
桥接模式要求正确识别出系统中两个独立变化的维度(抽象、和实现),因此其使用范围有一定的局限性,即需 要有这样的应用场景。
-
java中在JDBC 驱动程序中运用到桥接模式(银行管理、转账处理、消息管理)