通俗易懂设计模式(桥接模式)

82 阅读2分钟

桥接模式(Bridge Pattern)是一种结构型设计模式,它将一个抽象与其实现相分离,使它们可以独立地变化。桥接模式可以实现抽象和实现之间的松耦合,从而使两者可以独立地变化和扩展。

桥接模式的主要组成部分包括:

  1. 抽象(Abstraction):定义了一个抽象接口,它可以引用实现部分的接口。
  2. 实现(Implementation):定义了一个实现接口,它可以被抽象部分引用。
  3. 具体抽象(ConcreteAbstraction):实现了抽象接口,并持有实现部分的引用,通过调用实现部分的方法来实现抽象接口的方法。
  4. 具体实现(ConcreteImplementation):实现了实现接口,提供了具体的实现方法。

桥接模式的优点:

  1. 提高了代码的可扩展性:桥接模式可以通过添加新的具体抽象和具体实现来扩展系统的功能,而不需要修改已有的代码。
  2. 提高了代码的可维护性:桥接模式将抽象和实现分离,使得代码更加清晰和易于维护。

Java 实现桥接模式的示例代码:

// 实现接口
public interface Implementation {
    void operation();
}

// 具体实现 A
public class ConcreteImplementationA implements Implementation {
    @Override
    public void operation() {
        System.out.println("Concrete implementation A");
    }
}

// 具体实现 B
public class ConcreteImplementationB implements Implementation {
    @Override
    public void operation() {
        System.out.println("Concrete implementation B");
    }
}

// 抽象接口
public abstract class Abstraction {
    protected Implementation implementation;

    public Abstraction(Implementation implementation) {
        this.implementation = implementation;
    }

    public abstract void operation();
}

// 具体抽象 A
public class ConcreteAbstractionA extends Abstraction {
    public ConcreteAbstractionA(Implementation implementation) {
        super(implementation);
    }

    @Override
    public void operation() {
        System.out.println("Concrete abstraction A");
        implementation.operation();
    }
}

// 具体抽象 B
public class ConcreteAbstractionB extends Abstraction {
    public ConcreteAbstractionB(Implementation implementation) {
        super(implementation);
    }

    @Override
    public void operation() {
        System.out.println("Concrete abstraction B");
        implementation.operation();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Implementation implementationA = new ConcreteImplementationA();
        Abstraction abstractionA = new ConcreteAbstractionA(implementationA);
        abstractionA.operation();

        Implementation implementationB = new ConcreteImplementationB();
        Abstraction abstractionB = new ConcreteAbstractionB(implementationB);
        abstractionB.operation();
    }
}

在这个示例中,我们定义了一个实现接口 Implementation,它包含了一个 operation() 方法。接着,我们定义了两个具体实现类 ConcreteImplementationAConcreteImplementationB,它们分别实现了 Implementation 接口。

然后,我们定义了一个抽象接口 Abstraction,它包含了一个抽象方法 operation(),并持有一个实现接口的引用。接着,我们定义了两个具体抽象类 ConcreteAbstractionAConcreteAbstractionB,它们分别继承了 Abstraction 类,并实现了 operation() 方法。在具体抽象类中,我们通过调用实现接口的 operation() 方法来实现抽象接口的 operation() 方法。

在客户端代码中,我们创建了两个具体实现对象和两个具体抽象对象,并将具体实现对象传递给具体抽象对象。然后,我们调用具体抽象对象的 operation() 方法,从而实现了具体实现类的 operation() 方法的调用。