java设计模式之桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。

感觉听完上面的描述,没有几个人能够描述桥接模式到达怎么实现。

据我个人的理解,桥接模式一般用于适用于以下情况,某个类的子类都多个维度的变化,如果都分别实现,可能会造成子类的爆炸。

可以把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

下面通过画笔这个例子,来解读一下桥接模式。

photoshop很多人都用过,画笔既可以用来画圆,也可以画方,既可以画红色,也可以画蓝色。

假如形状有10种,颜色有10种,分别实现就会有10*10=100个子类,关键是还不止形状和颜色两个维度,如果再加上线条粗细,背景色等维度就真的太繁琐了。

我们将形状Shape和颜色Color解耦合,分别实现

public abstract class Color {
    @Override
    public String toString() {
        return this.getClass().getSimpleName();
    }
}


public class BlueColor extends Color{

}

public class GreenColor extends Color{

}

public class RedColor extends Color{

}

在实现一个Shape类,持有一个颜色Color属性

public abstract class Shape {
    private Color color;

    public void setColor(Color color) {
        this.color = color;
    }

    public Color getColor() {
        return color;
    }

    abstract void draw();
}

//正方形
public class Square extends Shape{
    @Override
    void draw() {
        System.out.println(getColor()+" "+this.getClass().getSimpleName());
    }
}

//圆形
public class Circle extends Shape{
    @Override
    void draw() {
        System.out.println(getColor()+" "+this.getClass().getSimpleName());
    }
}

//长方形
public class Rectangle extends Shape{
    @Override
    void draw() {
        System.out.println(getColor()+" "+this.getClass().getSimpleName());
    }
}

这样就可以让形状和颜色分别实现

public class PaintBoard {
    public static void main(String[] args) {
        BlueColor blueColor = new BlueColor();
        Square square = new Square();
        square.setColor(blueColor);
        square.draw();
    }
}
//输出
BlueColor Square

 

posted @ 2022-02-01 16:52  Mars.wang  阅读(73)  评论(0编辑  收藏  举报