设计模式系列——桥接模式

258 阅读2分钟

原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。

桥接模式用于将抽象部分与它的实现部分分离,使他们可以独立的变化。这句话不是很好理解,我来简单翻译一下,大概就是将一个事物的两个维度的变化解耦开。

举个例子

我们来看个毛笔和蜡笔的例子,假设我们需要大中小三种型号的画笔,能够绘制5种不同的颜色,如果使用蜡笔那么我们需要15只,如果使毛笔的话,我们只需要3只,外加5种颜料盒就OK。这里的关键点在于,毛笔可以做到将笔的型号和颜色解耦开,使他们可以独立的变化,这就是桥接模式。

先来看一下UML图:

bridge.png

再来看一下具体代码如何实现。

public interface Color {
    String draw();
}

红颜色

public class RedColor implements Color {
    @Override
    public String draw() {
        return "红色";
    }
}

定义抽象的毛笔

public abstract class BrushPen {

    //桥接画笔和颜色
    protected Color color;

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

    public abstract void operation();

}

定义一个小号的毛笔

public class SmallBrushPen extends BrushPen {
    @Override
    public void operation() {
        System.out.println(this.color.draw() + " 小号毛笔");
    }
}

客户端这样使用桥接模式

public class BridgeBrushPenDemo {
    public static void main(String[] args){
        BrushPen smallBrushPen = new SmallBrushPen();
        //红色小号毛笔
        smallBrushPen.setColor(new RedColor());
        smallBrushPen.operation();
        //绿色小号毛笔
        smallBrushPen.setColor(new Green());
        smallBrushPen.operation();
    }
}

总结

桥接模式是结构型模式,再事物涉及多个维度的变化时,使用桥接模式可以大大降低系统复杂度,这个模式也是我认为的最难理解的一个设计模式。

推荐阅读

1. Java并发编程那些事儿(十)——最后的总结

2. 程序员应该掌握的常用网络问题定位工具

3. Awk这件上古神兵你会用了吗

4. 手把手教你搭建一套ELK日志搜索运维平台

原创:花括号MC(微信公众号:huakuohao-mc)。关注JAVA基础编程及大数据,注重经验分享及个人成长。