Java桥梁设计模式

Java桥梁设计模式

定义

桥梁模式(Bridge Pattern)也叫做桥接模式,是一种结构型设计模式。它的定义是:将抽象和实现解耦,使得两者可以独立地变化。

对应角色

  • 抽象化(Abstraction)角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
  • 修正抽象化(Refined Abstraction)角色:它引用实现化角色对抽象化角色进行修正。
  • 实现化(Implementor)角色:它是接口或者抽象类,定义角色必需的行为和属性。
  • 具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。

优缺点

优点

  • 抽象与实现分离,扩展能力强。
  • 符合开闭原则。
  • 符合合成复用原则。
  • 实现细节对客户透明。

缺点

  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。
  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。¹³

应用场景

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。¹

实例

// 实现化角色
interface Implementor {
    void operationImpl();
}

// 具体实现化角色A
class ConcreteImplementorA implements Implementor {
    public void operationImpl() {
        System.out.println("具体实现化(Concrete Implementor)角色A被访问");
    }
}

// 具体实现化角色B
class ConcreteImplementorB implements Implementor {
    public void operationImpl() {
        System.out.println("具体实现化(Concrete Implementor)角色B被访问");
    }
}

// 抽象化角色
abstract class Abstraction {
    protected Implementor imple;

    protected Abstraction(Implementor imple) {
        this.imple = imple;
    }

    public abstract void operation();
}

// 扩展抽象化角色
class RefinedAbstraction extends Abstraction {
    protected RefinedAbstraction(Implementor imple) {
        super(imple);
    }

    public void operation() {
        System.out.println("扩展抽象化(Refined Abstraction)角色被访问");
        imple.operationImpl();
    }
}

// 客户端代码
public class BridgePattern {
    public static void main(String[] args) {
        Implementor imple = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(imple);
        abs.operation();

        imple = new ConcreteImplementorB();
        abs = new RefinedAbstraction(imple);
        abs.operation();
    }
}

你可能感兴趣的:(设计模式系列,java,设计模式)