大话设计模式——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协同工作的场合
相关推荐
xingxiliang5 小时前
深入浅出 Android CTS 视频测试:从环境搭建、用例设计到底层通信原理
android·音视频
我命由我123455 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
AI大法师6 小时前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
雨白7 小时前
深入理解 Kotlin 协程 (八):拾遗补阙,探秘官方框架的调度细节与取消闭环
android·kotlin
海天鹰8 小时前
PHP上传文件
android·开发语言·php
晚安code9 小时前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
2501_9159184110 小时前
详解iOS App上架至App Store的全流程步骤与注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
码农coding11 小时前
android12 SystemUI之StatusBar(二)
android
Lesile13 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
杉氧13 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter