# 23种设计模式-桥接模式

# 1.桥接模式

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

# 优缺点

# 优点:

分离抽象与实现 提高扩展型 符合开闭原则 符合合成复用原则

# 缺点:

系统复杂 识别变化维度

# 使用场景

# 实现方式

# 视频格式抽象


public interface Vedio {
    /**
     * 打开视频
     *      可以打开 MP4 / FLV 格式视频
     *      视频 ( 格式 ) 是个 抽象
     * @return
     */
    Vedio openVedio();

    /**
     * 查看视频信息
     */
    void showVedio();
}

# FLV 视频格式实现


/**
 * FLV 视频格式
 */
public class FlvVedio implements Vedio {
    @Override
    public Vedio openVedio() {
        System.out.println("打开 FLV 格式视频");
        return new FlvVedio();
    }

    @Override
    public void showVedio() {
        System.out.println("当前视频格式是 FLV");
    }
}

# MP4 视频格式实现

/**
 * MP4 格式
 */
public class MP4Vedio implements Vedio {
    @Override
    public Vedio openVedio() {
        System.out.println("打开 MP4 格式视频");
        return new MP4Vedio();
    }

    @Override
    public void showVedio() {
        System.out.println("当前视频格式是 MP4");
    }
}


# 系统平台抽象

 
 /**
  * 平台操作系统 抽象类
  */
 public abstract class Platform {
     /**
      * 这是桥接模式最核心的代码
      *      在 Platform 中通过组合方式关联 Vedio
      *      Platform 的子类也可以关联 Vedio 子类
      */
     protected Vedio account;
 
     public Platform(Vedio account) {
         this.account = account;
     }
 
     /**
      * 该方法与 Vedio 中的方法名相同
      *      方法名相同不是强制的
      * @return
      */
     abstract Vedio openVedio();
 }

# Linux 系统平台实现


 
 public class LinuxPlatform extends Platform {
     public LinuxPlatform(Vedio account) {
         super(account);
     }
 
     @Override
     Vedio openVedio() {
         System.out.println("在 Linux 平台播放视频");
         return account;
     }
 }


# Android 系统平台实现


public class AndroidPlatform extends Platform {
    public AndroidPlatform(Vedio account) {
        super(account);
    }

    @Override
    Vedio openVedio() {
        System.out.println("在 Android 平台打开视频");
        return account;
    }
}


# 测试类


public class Main {
    public static void main(String[] args) {
        // 在 Linux 平台打开 FLV 视频
        Platform linuxPlatform = new LinuxPlatform(new FlvVedio());
        Vedio linuxFlv = linuxPlatform.openVedio();
        linuxFlv.showVedio();

        System.out.println();

        // 在 Android 平台打开 MP4 视频
        Platform androidPlatform = new AndroidPlatform(new MP4Vedio());
        Vedio androidMp4 = androidPlatform.openVedio();
        androidMp4.showVedio();
    }
}

参考博客:https://blog.csdn.net/shulianghan/article/details/119842918