简介
桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥。
场景示例
比如生活中我们要追剧有很多的平台如:爱奇艺,腾讯视频,优酷。我们也可以选择不同的设备去观看如:手机,平板,电视。平台是可以去拓展的,如:芒果tv,哔哩哔哩;设备也可以拓展,如:投影仪,车机。
代码示例
先构建平台的接口
/**
* 平台接口
*/
public interface IPlatform {
void open(String name);
}
具体平台的实现
/**
* 腾讯视频实现
*/
public class TencentPlatform implements IPlatform{
@Override
public void open(String name) {
System.out.println("腾讯视频播放:" + name);
}
}
/**
* 优酷视频实现
*/
public class YouKuPlatform implements IPlatform{
@Override
public void open(String name) {
System.out.println("优酷视频播放:" + name);
}
}
创建桥接的设备抽象类
/**
* 电子产品抽象类
*/
public abstract class AbstractProduct {
protected IPlatform platform;
public AbstractProduct(IPlatform platform){
this.platform = platform;
}
abstract void open(String name);
}
抽象类实现
/**
* 平板
*/
public class PadProduct extends AbstractProduct{
public PadProduct(IPlatform platform) {
super(platform);
}
@Override
void open(String name) {
System.out.println("在平板上打开");
platform.open(name);
}
}
/**
* 手机
*/
public class PhoneProduct extends AbstractProduct{
public PhoneProduct(IPlatform platform) {
super(platform);
}
@Override
void open(String name) {
System.out.println("在手机上打开");
platform.open(name);
}
}
客户端使用
public class Demo {
public static void main(String[] args) {
TencentPlatform tencentPlatform = new TencentPlatform();
AbstractProduct padProduct = new PadProduct(tencentPlatform);
padProduct.open("花园宝宝");
YouKuPlatform youKuPlatform = new YouKuPlatform();
AbstractProduct phoneProduct = new PhoneProduct(youKuPlatform);
phoneProduct.open("天线宝宝");
}
}
输出结果
桥接模式优缺点
优点
- 分离抽象与实现:分离抽象部分和具体实现部分
- 提高扩展型:提高了系统的可扩展性
缺点
- 系统复杂度:增加了系统的理解与设计复杂度
- 识别变化维度:需要为业务有足够的理解可以正确的识别出系统中两个不同维度的变化