大话设计模式——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协同工作的场合
相关推荐
360智汇云8 小时前
隔离VPC标准路径:出公网链路的设计与实现
android·服务器·数据库
nece0019 小时前
win10家庭版安装Android模拟器(AVD 安卓虚拟设备)
android·模拟器
GY-9310 小时前
【Android之Compose开发基础】创建首个Android项目
android
00后程序员张11 小时前
无需 Mac 的 iOS App 上架工具,开心上架Appuploader 负责哪些环节
android·ios·小程序·https·uni-app·iphone·webview
吹什么轩21 小时前
MySQL:数据类型
android·adb
酷炫码神21 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
造火箭1 天前
安卓不同类型自动化测试介绍
android
汪海游龙1 天前
流式回复结尾的那一下闪:逐帧定位 Compose 聊天列表的三处布局跳动
android·性能优化·kotlin
2501_915909061 天前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
geovindu1 天前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式