📜  设计模式-桥梁模式(1)

📅  最后修改于: 2023-12-03 15:28:08.761000             🧑  作者: Mango

设计模式-桥梁模式

1. 什么是桥梁模式?

桥梁模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。它通过对象组合的方式,将不同的实现方式与抽象进行分离,从而使它们可以独立地变化。

2. 桥梁模式的应用场景

当一个类有多个变化的维度时,可以考虑使用桥梁模式。例如,一个形状类,可以有不同的颜色、不同的线条等等,这就是一个变化的维度。而如果采用继承的方式来实现,就会产生类爆炸的问题,而采用桥梁模式,就可以将多个变化的维度分离出来,降低了系统的复杂度。

3. 桥梁模式的组成部分

桥梁模式主要由抽象部分和实现部分组成。

3.1. 抽象部分

抽象部分定义了抽象方法和属性,以及对实现部分的依赖。它包含一个指向实现部分的引用,它可以是一个接口或者抽象类。

3.2. 实现部分

实现部分实现了抽象部分定义的方法和属性。它包含了实现抽象部分所需要的具体实现,可以是一个类或者接口。

3.3. 桥梁

桥梁将抽象部分和实现部分连接起来,它包含了一个指向抽象部分的引用和一个指向实现部分的引用。它实现了抽象部分中定义的方法和属性,同时调用实现部分中的方法和属性,将抽象部分和实现部分解耦。

4. 桥梁模式的代码实现

下面是一个简单的桥梁模式的代码实现。

// 抽象部分
interface Shape {
    void draw();
}

// 实现部分
interface DrawAPI {
    void drawCircle(int x, int y, int radius);
}

// 实现部分的具体实现
class RedDrawAPI implements DrawAPI {
    @Override
    public void drawCircle(int x, int y, int radius) {
        System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
    }
}

class GreenDrawAPI implements DrawAPI {
    @Override
    public void drawCircle(int x, int y, int radius) {
        System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
    }
}

// 抽象部分的具体实现
class Circle implements Shape {
    private final int x;
    private final int y;
    private final int radius;
    private final DrawAPI drawAPI;

    public Circle(int x, int y, int radius, DrawAPI drawAPI) {
        this.x = x;
        this.y = y;
        this.radius = radius;
        this.drawAPI = drawAPI;
    }

    @Override
    public void draw() {
        drawAPI.drawCircle(x, y, radius);
    }
}

// 测试代码
public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle(100,100, 10, new RedDrawAPI());
        Shape greenCircle = new Circle(100,100, 10, new GreenDrawAPI());

        redCircle.draw();
        greenCircle.draw();
    }
}
5. 总结

桥梁模式是一种将抽象部分和实现部分分离的设计模式,它将多个变化的维度分离出来,降低了系统的复杂度。它由抽象部分、实现部分和桥梁组成,可以通过对象组合的方式,将不同的实现方式与抽象进行分离,从而使它们可以独立地变化。在开发中,在遇到多个变化的维度时,可以考虑使用桥梁模式。