设计模式—桥接模式
桥接模式
桥梁模式(Bridge Pattern) 也叫做桥接模式, 是一个比较简单的模式 。
桥接模式是一种结构模式。桥接模式遵循了里氏替换原则和依赖倒置原则,最终实现了开闭原则,对修改关闭,对扩展开放 。
定义:将抽象和实现解耦, 使得两者可以独立地变化。
主要特点:将抽象与行为实现分离开,从而保持各部分的独立性以及应为他们的功能扩展。
桥接模式连接两边,分别是类的功能层次结构与类的实现层次结构。
优点
- 抽象和实现分离 。
- 优秀的扩充能力 。
- 实现细节对客户透明 。客户不用关心细节的实现, 它已经由抽象层通过聚合关系完成了封装。
使用场景
- 不希望或不适用使用继承的场景 。例如继承层次过渡、 无法更细化设计颗粒等场景, 需要考虑使用桥梁模式。
- 接口或抽象类不稳定的场景。明知道接口不稳定还想通过实现或继承来实现业务需求, 那是得不偿失的, 也是比较失败的做法。
- 重用性要求较高的场景 。
注意事项
桥梁模式是非常简单的, 使用该模式时主要考虑如何拆分抽象和实现, 并不是一涉及继承就要考虑使用该模式, 那还要继承干什么呢? 桥梁模式的意图还是对变化的封装, 尽量把可能变化的因素封装到最细、 最小的逻辑单元中, 避免风险扩散。 因此读者在进行系统设计时, 发现类的继承有N层时, 可以考虑使用桥梁模式。
案例分析
类的实现层次结构
- 定义实现角色的接口
public interface Brand {
void open();
void close();
void call();
}
- 定义具体实现话角色1
public class Vivo implements Brand {
@Override
public void open() {
System.out.println("Vivo手机开机");
}
@Override
public void close() {
System.out.println("Vivo手机关机");
}
@Override
public void call() {
System.out.println("Vivo手机打电话");
}
}
- 定义具体实现话角色2
public class XiaoMi implements Brand {
@Override
public void open() {
System.out.println("小米手机开机");
}
@Override
public void close() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
类的功能层次结构
- 定义抽象化角色
public abstract class Phone {
private Brand brand;
public Phone(Brand brand) {
super();
this.brand = brand;
}
protected void open() {
brand.open();
}
protected void close() {
brand.close();
}
protected void call() {
brand.call();
}
}
- 定义扩展抽象化角色
public class FoldedPhone extends Phone {
public FoldedPhone(Brand brand) {
super(brand);
}
@Override
public void open() {
super.open();
System.out.println("折叠样式手机");
}
@Override
public void close() {
super.close();
System.out.println("折叠样式手机");
}
@Override
public void call() {
super.call();
System.out.println("折叠样式手机");
}
}
- 定义客户端测试
public class Client {
public static void main(String[] args) {
FoldedPhone phone = new FoldedPhone(new XiaoMi());
phone.open();
phone.close();
phone.call();
System.out.println();
FoldedPhone phone1 = new FoldedPhone(new Vivo());
phone1.open();
phone1.close();
phone1.call();
}
}
输出:
小米手机开机
折叠样式手机
小米手机关机
折叠样式手机
小米手机打电话
折叠样式手机Vivo手机开机
折叠样式手机
Vivo手机关机
折叠样式手机
Vivo手机打电话
折叠样式手机Process finished with exit code 0

浙公网安备 33010602011771号