介绍:
1、桥接模式是指:将实现和抽象放在两个不同类层次中,使两个层次可以独立改变 2、是一种结构型设计模式 3、Bridge模式基于类的最小设计原则,通过使用封装、聚合以及继承等行为让不同的类承担不同的职责。 4、特点:把抽象与行为实现分离开,从而保持各部分的独立性以及应对它们的功能扩展
例子
package com.pxl.testinterface.bridge;
// 手机品牌接口
public interface Brand {
void open();
void close();
void call();
}
// 具体的手机品牌实现
class Apple implements Brand {
@Override
public void open() {
System.out.println("Apple phone is opening");
}
@Override
public void close() {
System.out.println("Apple phone is closing");
}
@Override
public void call() {
System.out.println("Apple phone is calling");
}
}
// 具体的手机品牌实现
class Samsung implements Brand {
@Override
public void open() {
System.out.println("Samsung phone is opening");
}
@Override
public void close() {
System.out.println("Samsung phone is closing");
}
@Override
public void call() {
System.out.println("Samsung phone is calling");
}
}
// 手机抽象类
abstract class Phone {
protected Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
public void open() {
brand.open();
}
public void close() {
brand.close();
}
public void call() {
brand.call();
}
}
// 具体的手机实现
class FoldedPhone extends Phone {
public FoldedPhone(Brand brand) {
super(brand);
}
public void open() {
super.open();
System.out.println("FoldedPhone is opening");
}
public void close() {
super.close();
System.out.println("FoldedPhone is closing");
}
public void call() {
super.call();
System.out.println("FoldedPhone is calling");
}
}
测试:
package com.pxl.testinterface.bridge;
public class BridgePatternExample {
public static void main(String[] args) {
Brand apple = new Apple();
Phone foldedPhone = new FoldedPhone(apple);
foldedPhone.open();
foldedPhone.call();
foldedPhone.close();
Brand samsung = new Samsung();
Phone foldedPhone2 = new FoldedPhone(samsung);
foldedPhone2.open();
foldedPhone2.call();
foldedPhone2.close();
}
}
类图分析:
桥接模式在JDBC源码剖析
总结
个人理解:将桥接模式理解为一种将抽象部分和具体实现部分分离开的设计模式。桥接模式通过对象间的组合关系,而不是继承关系,来实现抽象部分和实现部分的解耦。(抽象和具体分开)
SpringMVC的三层架构中,service接口和serviceImpl也是运用了这种桥接思想。
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化而互不影响。桥接模式通过对象间的组合关系,而不是继承关系,来实现抽象部分和实现部分的解耦。
桥接模式的结构
Abstraction(抽象部分):定义抽象类或接口,并包含一个对实现部分的引用。
Refined Abstraction(扩充抽象部分):扩展抽象部分的功能,可以继续定义自己的方法。
Implementor(实现部分):定义实现类接口,供具体实现部分继承。
Concrete Implementor(具体实现部分):实现实现部分接口的具体类。
桥接模式的优点
解耦抽象和实现:桥接模式可以将抽象部分和实现部分独立开来,它们可以独立变化而互不影响。
扩展性良好:桥接模式通过对象组合而不是继承,可以轻松添加新的抽象部分和实现部分。
隐藏实现细节:桥接模式可以隐藏实现部分的细节,对客户端透明,降低了系统的复杂度。
桥接模式的缺点
增加类的个数:桥接模式需要定义抽象部分和实现部分的类,可能会增加系统中的类的数量。
增加代码复杂度:桥接模式在一定程度上增加了系统的复杂度,对于简单的系统可能显得繁琐。
桥接模式的特点
抽象和实现分离:桥接模式将抽象部分和实现部分分离,使得它们可以独立变化。
组合优于继承:桥接模式通过对象组合来代替继承,提高了系统的灵活性。
适用于多维变化:当一个类有多个独立变化的维度时,可以考虑使用桥接模式。
桥接模式小结
桥接模式适用于需要抽象部分和实现部分独立变化的场景,能够提高系统的灵活性和可维护性。
其优点在于解耦和扩展性强,但也存在一定的缺点,需要根据具体情况来选择是否使用桥接模式