桥接模式
定义
将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化,如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构。
角色
- Client(客户端):外部使用程序
- Abstraction(抽象类):定义抽象类的接口,一般将最基础业务方法的一个纬度定义为抽象类,并在类中定义抽象方法;
- Implementor(实现类接口):定义实现类的接口,与Abstraction不同的另外一个纬度的基类或者是接口;
- RefinderAbstracion(扩充抽象类):抽象类的实现者,根据不同变化纬度对应不同类;
- ConcreteImplementor(具体实现类):实现抽象类接口,完成不同实现;
示例
驱动接口
public interface Driver {
public void connect();
}
oracle驱动实现类
public class OracleDriver implements Driver {
@Override
public void connect() {
System.out.println("连接oracle");
}
}
mysql驱动类
public class MysqlDriver implements Driver{
@Override
public void connect() {
System.out.println("连接mysql");
}
}
抽象桥接类
public abstract class MyBridge {
private Driver driver;
public void connect(){
driver.connect();
}
public Driver getDriver() {
return driver;
}
public void setDriver(Driver driver) {
this.driver = driver;
}
}
具体桥接类
public class MyBridgeImpl extends MyBridge {
//若有需要可具体实现
}
测试类
public class BridgeTest {
public static void main(String[] args) {
MyBridgeImpl myBridgeImpl = new MyBridgeImpl();
myBridgeImpl.setDriver(new OracleDriver());
myBridgeImpl.connect();
System.out.println("=====================");
myBridgeImpl.setDriver(new MysqlDriver());
myBridgeImpl.connect();
}
}
分析
优点:
- 分离抽象接口及其实现部分,提高了比继承更好的解决方案。
- 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统。
- 实现细节对客户不透明,可以隐藏实现细节.
跟策略模式对比
参考
主要不同是桥接模式的abstraction是个抽象类,还可以有实现;