大话设计模式——11.桥接模式(Bridge Pattern)

简介

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

UML图:

应用场景:

  1. 系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性
  2. 不想使用继承导致系统类的个数急剧增加
  3. 某个类存在多个变化维度使用继承方式容易出现类的膨胀
示例

手机厂商和软件厂商

  1. 实现类:软件
java 复制代码
public interface Software {

    /**
     * 运行
     */
    void run();
}

1.1 具体实现类:

java 复制代码
public class MusicSoftware implements Software{
    @Override
    public void run() {
        System.out.println("运行 音乐软件");
    }
}
java 复制代码
public class GameSoftware implements Software {

    @Override
    public void run() {
        System.out.println("运行 游戏软件");
    }
}
  1. 抽象类:手机
java 复制代码
public abstract class Phone {


    protected Software software;

    public Phone(Software software) {
        this.software = software;
    }

    /**
     * 使用
     */
    public abstract void use();

}

2.1 实现类:

java 复制代码
public class AndroidPhone extends Phone {

    public AndroidPhone(Software software) {
        super(software);
    }

    @Override
    public void use() {
        System.out.println("安卓手机....");
        software.run();
    }
}
java 复制代码
public class IOSIphone extends Phone {


    public IOSIphone(Software software) {
        super(software);
    }

    @Override
    public void use(){
        System.out.println("苹果手机....");
        software.run();

    }
}
  1. 运行
java 复制代码
public class Main {

    public static void main(String[] args) {
        Software musicSoftware = new MusicSoftware();
        Software gameSoftware = new GameSoftware();
        new AndroidPhone(musicSoftware).use();
        new IOSIphone(musicSoftware).use();
        new AndroidPhone(gameSoftware).use();
        new IOSIphone(gameSoftware).use();
    }
}
总结
  • 优点
    • 实现抽象和实现的分离,提高系统灵活性
    • 具备良好的扩展性,符合开闭原则
  • 缺点
    • 增加系统的理解和设计难度
VS 适配器模式
  • 适用阶段不同
    • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
    • 适配器模式用于设计完成之后,发现类、接口之间无法一同工作,需要进行填坑
  • 应用场景
    • 适配器模式经常用于在第三方API协同工作的场合
相关推荐
一笑的小酒馆10 小时前
Android中WebRTC通信
android
KevinWang_13 小时前
Android Hilt 依赖注入
android
古法安卓13 小时前
Android-深入理解 Android 回调(Callback)机制
android·性能优化·android studio
古法安卓13 小时前
Android-车机 GNSS 定位数据接收问题排查
android·java·android studio
FungLeo15 小时前
Flutter 吸顶分组列表实战:语义桶分组 + 点击头平滑滚动
android·flutter
阿巴斯甜16 小时前
Android 自定义权限
android
FungLeo16 小时前
Flutter 超长 StatefulWidget 拆分术:part of + extension on State 实战
android·flutter·dart
剧中有戏17 小时前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式
小王C语言18 小时前
MySQL 数据类型:数值类型、字符串类型、日期和时间类型、enum 和 set、find_in_set 查询
android·数据库·mysql
我命由我1234518 小时前
Android 控件 - CardView(快速实现圆角)
android·java·java-ee·kotlin·android studio·android-studio·android runtime