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

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

常见结构如下:
在这里插入图片描述
可以看到,桥接模式的核心在于抽象类依赖接口的具体实现。这样就能使得接口的实现类和抽象类可以自由变化。抽象类来维护与接口的关系。

还是举个栗子。

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

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

在这里插入图片描述
代码实现如下:

彩笔接口

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

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

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

在这里插入图片描述
代码实现如下:
画画的类容抽象和动作抽象:

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("风景画");
    }
}

综合上面两部再来看:
在这里插入图片描述
这就是桥接模式模式了。

再来看下测试结果:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值