将继承关系转化成关联关系, 降低类与类之间的耦合度, 使系统更加灵活, 减少了系统中类的数量.
结构
- 抽象类: 一般是抽象类而不是接口, 其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象.
- 扩充抽象类
- 实现类接口
具体实现类
Demo
抽象类: 其中声明了实现类接口 File 类型的对象属性
`
java
public abstract class AbstractDb {protected File file;
public AbstractDb(File file) {
this.file = file;
}
abstract File exportFile();
}
##### 扩充抽象类: 继承抽象类, 实现其方法
```java
public class MysqlDb extends AbstractDb {
public MysqlDb(File file) {
super(file);
}
@Override
File exportFile() {
System.out.println("Db-mysql 导出文件");
return file.exportFile();
}
}
public class OracleDb extends AbstractDb {
public OracleDb(File file) {
super(file);
}
@Override
File exportFile() {
System.out.println("Db- Oracle 导出文件");
return file.exportFile();
}
}
实现类接口: 桥的另一端接口
public interface File {
File exportFile();
}
具体实现类: 实现类接口的实现, 做具体相关业务操作
public class ExcelFile implements File {
@Override
public File exportFile() {
System.out.println("导出Excel文件");
return new ExcelFile();
}
}
public class TextFile implements File {
@Override
public File exportFile() {
System.out.println("Text 格式文件");
return new TextFile();
}
}
Test
public class BridgeTest {
public static void main(String[] args) {
File file = new TextFile();
AbstractDb db = new MysqlDb(file);
db.exportFile();
}
}
输出结果:
Db-mysql 导出文件
Text 格式文件
总结
- 扩展方便, 减少子类个数
- 结构较复杂. 增加系统理解难度
- 多个维度独立维护, 同时有一定关联关系时适用