1、 桥接模式——Bridge
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何
意义。实现指的是抽象类和它的派生类用来实现自己的对象。由于实现的方式有多种,桥接模式的核心意图就是把这些实现独立出来,让它们独自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。
桥接模式的结构图如下:
15
将抽象部分与它的实现部分分离,这不是很好理解,我的理解就是实现系统可能有很多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。也就是说,在发现我们需要多角度去分类实现对象,而只用继承会造成大量的类增加,不能满足开放—封闭原则时,就应该要考虑桥接模式。
16
interface Sourceable {
public void method();
}
class SourceSub1 implements Sourceable {
@Override
public void method() {
System.out.println("this is the first sub!");
}
}
class SourceSub2 implements Sourceable {
@Override
public void method() {
System.out.println("this is the second sub!");
}
}
// 定义一个桥,持有Sourceable的一个实例
abstract class Bridge {
private Sourceable source;
public void method() {
source.method();
}
public Sourceable getSource() {
return source;
}
public void setSource(Sourceable source) {
this.source = source;
}
}
class MyBridge extends Bridge {
public void method(){
getSource().method();
}
}
public class Client {
public static void main(String<> args) {
Bridge bridge = new MyBridge();
/* 调用第一个对象 */
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();
/* 调用第二个对象 */
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}输出结果:
this is the first sub!
this is the second sub!
这样,就通过对Bridge类的调用,实现了对接口Sourceable的实现类SourceSub1和SourceSub2的调用。
数据库连接采用了这模式,可以去研究下数据库的实现。