- 目的 : 将抽象部分与其实现部分分离,使它们都可以独立地变化。
- 核心 : 使用组合代替继承,抽象类包含一个实现接口的引用,将具体实现委托给该引用。
- 场景 : 跨平台 UI 开发、数据库驱动、设备控制等。
首先是手机壳接口 - 实现部分接口
java
package bridge;
/*
定义手机壳的基本操作,不同的手机壳类型将实现此接口
*/
public interface ICellphoneShell {
/**
* 安装手机壳的方法
* 具体的安装逻辑由实现类完成
*/
void attachShell();
}
然后是 iPhone6 手机壳实现类 - 具体的实现部分
java
package bridge;
/*
实现了 ICellphoneShell 接口,提供 iPhone6 手机壳的具体安装逻辑
*/
public class IPhone6Shell implements ICellphoneShell {
@Override
public void attachShell() {
System.out.println("安装 iPhone6 手机壳");
// 这里可以添加 iPhone6 手机壳特有的安装逻辑
}
}
接着核心来了。抽象手机类 - 抽象部分
java
package bridge;
//通过组合功能,实现抽象部分与实现部分的桥接。(这个组合并不是UML中的组合关系)
public abstract class BaseCellphone {
protected ICellphoneShell shell; // 桥接的关键:对象组合,通过持有手机壳接口的引用来组合功能
// 注入手机壳实现
public BaseCellphone(ICellphoneShell shell) {
this.shell = shell;
}
/*
抽象组装方法
由具体子类实现完整的手机组装流程
*/
public abstract void assemble();
}
iPhone 手机类 - 扩展的抽象部分
java
package bridge;
// 继承自 BaseCellphone,实现具体的 iPhone 手机组装逻辑
public class IPhone extends BaseCellphone {
//将 shell(手机壳对象)传递给父类进行初始化,这样就将 iPhone 手机与具体的手机壳实现桥接在一起
public IPhone(ICellphoneShell shell) {
super(shell);
}
/*
实现 iPhone 手机的组装过程
组合了手机本身的组装逻辑和手机壳的安装逻辑
*/
@Override
public void assemble() {
System.out.println("组装 iPhone 手机"); // 手机本身的组装逻辑
shell.attachShell(); // 手机壳的安装逻辑
// 这里可以添加其他 iPhone 特有的组装步骤
}
}
最后看主函数入口
java
package bridge;
public class MainTest {
public static void main(String[] args) {
// 使用桥接模式:将 iPhone 手机与 iPhone6 手机壳进行组合
// 抽象部分(手机)和实现部分(手机壳)可以独立变化
BaseCellphone iPhone = new IPhone(new IPhone6Shell());
iPhone.assemble(); // 执行组装过程
}
}
