桥接模式

/ 设计模式

桥接模式(Bridge)

将抽象部门与它的实现部分分离,使他们都可以独立变化

GoF23种设计模式中,属于结构型模式( Structural patterns)

桥接模式就像桥一样,只不过它连接的两端分别对应着两组或多组关联的且可独立拓展的对象。

比如:支付行为和支付渠道。支付行为可以有付款、收款、转账等。支付渠道可以有工行、建行、农行等。

再比如:系统平台与播放器。系统平台可以有Mac、Windows等。播放器有酷狗、网易云音乐等。

通过桥接模式就可以将这两组抽象的对象自由组合和拓展。

实例

模式总览.png

角色说明

举例

桥接模式举例

public abstract class AbstractPlatform {

    protected Player player;

    public AbstractPlatform(Player player) {
        this.player = player;
    }

    abstract void play(String songName);
}
public class Mac extends AbstractPlatform {
    public Mac(Player player) {
        super(player);
    }

    @Override
    void play(String songName) {
        System.out.print("这是Mac平台...");
        player.playMusic(songName);
    }
}
public class Windows extends AbstractPlatform {

    public Windows(Player player) {
        super(player);
    }

    @Override
    void play(String songName) {
        System.out.print("这是windows平台...");
        player.playMusic(songName);
    }
}
public interface Player {

    void playMusic(String songName);
}
public class KugouMusicPlayer implements Player {
    @Override
    public void playMusic(String songName) {
        System.out.println("使用酷狗播放 " + songName + " ~~~");
    }
}
public class NeteaseCloudMusicPlayer implements Player {
    @Override
    public void playMusic(String songName) {
        System.out.println("使用网易云音乐播放 " + songName + " ~~~");
    }
}
public class Client {
    public static void main(String[] args) {
        Windows windows = new Windows(new NeteaseCloudMusicPlayer());
        windows.play("青花瓷");
    }
}
这是windows平台...使用网易云音乐播放 青花瓷 ~~~

实例

ssm三层架构,controller - service - dao

这里的service层桥接了controller层与dao层。使得controller层与dao层可以独立拓展。

总结

桥接模式核心是分离抽象类与实现类。使其自由组合独立拓展,从而提高系统的延展性。