你还不懂设计模式? - 桥接设计模式

桥接模式(Bridge Pattern),顾名思义。类似与桥的功能。联通两个不同领域。其实这个设计模式的作业也是如此。在Java世界中。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

常见结构如下:
你还不懂设计模式? - 桥接设计模式_第1张图片
可以看到,桥接模式的核心在于抽象类依赖接口的具体实现。这样就能使得接口的实现类和抽象类可以自由变化。抽象类来维护与接口的关系。

还是举个栗子。

场景①:用Java语言来描述彩笔的关系。

     分析: 彩笔是一个接口。不同颜色的彩笔是其子类。

你还不懂设计模式? - 桥接设计模式_第2张图片
代码实现如下:

彩笔接口

public interface IColourPen {
     
    /**
     * 画画
     * @param content 要画的类容
     */
    void draw(String content);
}

红色彩笔

public class RedColourPen implements IColourPen {
     
    @Override
    public void draw(String content) {
     
        System.out.println(String.format("您正在使用%s彩笔画画。类容为:%s", "红色", content));
    }
}

黑色彩笔

public class BlackColourPen implements IColourPen {
     
    @Override
    public void draw(String content) {
     
        System.out.println(String.format("您正在使用%s彩笔画画。类容为:%s", "黑色", content));
    }
}

测试:

IColourPen colourPen = new RedColourPen();
colourPen.draw("a dog");

输出:
您正在使用红色彩笔画画。类容为:a dog

场景②:我要使用彩笔来画不同的物体。例如人的肖像图,风景图等等。

分析:这个场景需要抽象画画的类容。不同的类容画画的过程不一样。而画画又要依赖彩笔。

你还不懂设计模式? - 桥接设计模式_第3张图片
代码实现如下:
画画的类容抽象和动作抽象:

public abstract class AbstractDrawContent {
     
    protected IColourPen colourPen ;

    public AbstractDrawContent(IColourPen colourPen) {
     
        this.colourPen = colourPen;
    }

    /**
     * 模版方法设计模式。
     * 模版方法。给子类实现。画不同的类容。就给不同的实现
     */
    public abstract void draw();
}

画人物肖像实现:

public class PortraitsDrawContentImpl extends AbstractDrawContent {
     
    public PortraitsDrawContentImpl(IColourPen colourPen) {
     
        super(colourPen);
    }

    @Override
    public void draw() {
     
        colourPen.draw("人物肖像");
    }
}

画风景图实现:

public class PaysageDrawContentImpl extends AbstractDrawContent {
     
    public PaysageDrawContentImpl(IColourPen colourPen) {
     
        super(colourPen);
    }

    @Override
    public void draw() {
     
        colourPen.draw("风景画");
    }
}

综合上面两部再来看:
你还不懂设计模式? - 桥接设计模式_第4张图片
这就是桥接模式模式了。

再来看下测试结果:

AbstractDrawContent drawContent = new PaysageDrawContentImpl(new RedColourPen());
drawContent.draw();

输出结果:
您正在使用红色彩笔画画。类容为:风景画

到这里桥接设计模式的基本结构就介绍清楚了。可以看到桥接设计模式是模版方法设计模式的进阶版。

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