结构型-桥接模式(Bridge Pattern)

概述

桥接模式(Bridge Pattern)是一种结构型设计模式,将抽象部分和实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,将抽象部分和实现部分分离开来,从而使它们可以独立地变化。这种分离使得抽象部分和实现部分可以独立地扩展和修改,互不影响。

桥接模式由两个独立的层次结构组成:抽象部分和实现部分。抽象部分定义了抽象类和接口,它包含了对实现部分的引用,并且定义了抽象方法。实现部分定义了接口和具体类,它实现了抽象部分定义的接口,并且提供了具体的实现。抽象部分和实现部分之间通过关联关系进行连接。

优点:

  • 可以将抽象部分和实现部分独立地进行扩展和修改,互不影响。这样可以减少系统的复杂性。
  • 可以在运行时动态地将抽象部分和实现部分进行组合。这样可以根据需要来选择不同的实现方式。
  • 可以减少继承关系的使用。继承关系是一种静态的关系,它在编译时就确定了,而桥接模式是一种动态的关系,它在运行时可以动态地进行组合。

缺点:

  • 增加了系统的复杂性,因为需要定义抽象部分和实现部分的接口和维护它们之间的关系。
  • 对于简单的系统,桥接模式可能会增加不必要的复杂性。

使用场景:

  • 当一个类存在两个或多个不相关的维度时,可以使用桥接模式将其拆分成两个或多个独立的层次结构。
  • 当需要修改一个类的实现细节时,可以使用桥接模式将其与其他类分离,便于进行独立的修改。
  • 当希望避免在接口和实现部分之间出现强紧耦合关系时,可以使用桥接模式。

示例

抽象电视和具体电视机制造厂商:电视可以是液晶、等离子和CRT电视机,而抽象电视可以根据不同的电视制造厂商进行操作。

首先定义一个抽象类,代表抽象部分:

public abstract class TV {
    protected Manufacturer manufacturer;

    protected TV(Manufacturer manufacturer) {
        this.manufacturer = manufacturer;
    }

    public abstract void produce();
}

接下来定义一个实现部分的接口:

public interface Manufacturer {
    public void manufacture();
}

为抽象类和接口添加具体的实现,如下所示:

public class Sony implements Manufacturer {
    public void manufacture() {
        System.out.println("Manufacturing TV by Sony");
    }
}

public class Samsung implements Manufacturer {
    public void manufacture() {
        System.out.println("Manufacturing TV by Samsung");
    }
}

最后,我们将实现部分的具体实现注入到抽象类中,如下所示:

public class SmartTV extends TV {
    public SmartTV(Manufacturer manufacturer) {
        super(manufacturer);
    }

    public void produce() {
        System.out.print("Producing Smart TV... ");
        manufacturer.manufacture();
    }
}

现在,我们可以使用桥接模式来生产不同制造商的智能电视,如下所示:

public class BridgePatternDemo {
    public static void main(String[] args) {
        TV sonySmartTV = new SmartTV(new Sony());
        sonySmartTV.produce();

        TV samsungSmartTV = new SmartTV(new Samsung());
        samsungSmartTV.produce();
    }
}

输出结果为:

Producing Smart TV... Manufacturing TV by Sony
Producing Smart TV... Manufacturing TV by Samsung

你可能感兴趣的:(探索设计模式,桥接模式,设计模式)