桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。
桥接模式 (Bridge) 是一种结构型设计模式, 可将抽象部分与实现部分分离,使它们都可以独立的变化。如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。抽象化角色和具体化角色都应该可以被子类扩展。
在这种情况下,桥接模式可以灵活地组合不同的抽象化角色和具体化角色,并独立化地扩展。设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
【Implementor】定义实现接口。
- interface Implementor {
- // 实现抽象部分需要的某些具体功能
- public void operationImpl();
- }
【Abstraction】定义抽象接口
- abstract class Abstraction {
- // 持有一个 Implementor 对象,形成聚合关系
- protected Implementor implementor;
-
- public Abstraction(Implementor implementor) {
- this.implementor = implementor;
- }
-
- // 可能需要转调实现部分的具体实现
- public void operation() {
- implementor.operationImpl();
- }
- }
【ConcreteImplementor】实现 Implementor 中定义的接口
- class ConcreteImplementorA implements Implementor {
- @Override
- public void operationImpl() {
- // 真正的实现
- System.out.println("具体实现A");
- }
- }
-
- class ConcreteImplementorB implements Implementor {
- @Override
- public void operationImpl() {
- // 真正的实现
- System.out.println("具体实现B");
- }
- }
【RefinedAbstraction】扩展 Abstraction 类。
- class RefinedAbstraction extends Abstraction {
-
- public RefinedAbstraction(Implementor implementor) {
- super(implementor);
- }
-
- public void otherOperation() {
- // 实现一定的功能,可能会使用具体实现部分的实现方法,
- // 但是本方法更大的可能是使用 Abstraction 中定义的方法,
- // 通过组合使用 Abstraction 中定义的方法来完成更多的功能。
- }
- }
- public class BridgePattern {
- public static void main(String[] args) {
- Implementor implementor = new ConcreteImplementorA();
- RefinedAbstraction abstraction = new RefinedAbstraction(implementor);
- abstraction.operation();
- abstraction.otherOperation();
- }
- }
-
- ----------------------------------------------------------
-
- 具体实现A
- 其他操作