桥接模式结构图桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。
外观模式中的角色:
- Abstraction:抽象类,抽象化给出的定义,并保存一个对实现化对象的引用。
- RefinedAbstraction:扩充抽象类,扩展抽象化角色,改变和修正父类对抽象化的定义。
- Implementor:实现类接口,定义实现类的接口。
- ConcreteImplementor:具体实现类,具体实现 Implementor 接口。
桥接模式简单实现
(1)实现类接口
public abstract class Implementor {
public abstract void operation();
}
(2)具体实现类
public class ConcreteImplementorA extends Implementor {
@Override
public void operation() {
System.out.println("Windows 小游戏启动");
}
}
public class ConcreteImplementorB extends Implementor {
@Override
public void operation() {
System.out.println("Linux 小游戏启动");
}
}
(3) 抽象类
public abstract class Abstraction {
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
(4)扩充抽象类
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
implementor.operation();
}
}
(5)客户端调用
public class Client {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.setImplementor(new ConcreteImplementorA());
abstraction.operation();
abstraction.setImplementor(new ConcreteImplementorB());
abstraction.operation();
}
}
(6)输出
Windows 小游戏启动
Linux 小游戏启动
桥接模式使用场景
使用场景:
- 如果你不希望在抽象和实现部分采用固定的绑定关系,可以采用桥接模式,来把抽象和实现部分分开,然后在程序运行期间来动态的设置抽象部分需要用到的具体的实现,还可以动态切换具体的实现。
- 如果出现抽象部分和实现部分都应该可以扩展的情况,可以采用桥接模式,让抽象部分和实现部分可以独立的变化,从而可以灵活的进行单独扩展,而不是搅在一起,扩展一边会影响到另一边。
- 如果希望实现部分的修改,不会对客户产生影响,可以采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,可以独立于抽象部分,也就不会对客户产生影响了,也可以说对客户是透明的。
- 如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的纬度,然后通过桥接模式来分离它们,从而减少子类的数目。
网友评论