惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
量子位
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
U
Unit 42
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
博客园 - Franky
博客园 - 聂微东

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈
设计模式-桥接模式 - OXOXTECH 牛牛技术客栈
Jensen · 2024-02-20 · via 牛牛技术客栈

设计模式-桥接模式

Jensen Java Java, 设计模式

前言

Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(5)适配器模式》文章中,我们介绍了适配器模式。本文是这个系列的第六篇章,我们将讲解一下桥接模式的实现方式、应用场景以及它的用途。

桥接模式

桥接模式是将抽象部分与其实现部分分离,使它们可以独立变化,而不会相互影响。在Java中,桥接模式通常用于处理类的多层继承结构,通过将抽象与实现分离,使得它们可以独立扩展。

使用场景

  1. 当一个类存在两个独立变化的维度时。
  2. 当希望避免在抽象和实现之间建立固定的绑定关系时。
  3. 当一个类需要在运行时动态选择实现时。

代码实现

这里以电子设备控制器来实现,在电子设备控制器中,桥接模式可以将抽象的设备控制接口与不同的设备(如电脑、手机等)的实现部分分离开来,使得控制器可以方便地控制不同的设备。

定义一个控制开关接口

/**
 * 开关接口
 * @author Jensen
 * @date 2024-01-24
 * */
public interface Switch {
    void turnOn();
    void turnOff();
}

创建ComputerPhone实现类,分别实现开关接口

ComputerImpl:

/**
 * 计算机实现类
 * @author Jensen
 * @date 2024-01-24
 * */
public class ComputerImpl implements Switch {
    @Override
    public void turnOn() {
        System.out.println("打开电脑");
    }

    @Override
    public void turnOff() {
        System.out.println("关闭电脑");
    }
}

Phone:

/**
 * 手机实现类
 * @author Jensen
 * @date 2024-01-24
 * */
public class Phone implements Switch {
    @Override
    public void turnOn() {
        System.out.println("打开手机");
    }

    @Override
    public void turnOff() {
        System.out.println("关闭手机");
    }
}

创建RemoteControl抽象类

RemoteControl 定义了抽象部分的接口,并维护一个指向实现部分的引用。它通常包含对实现部分的委托方法

/**
 * 远程控制抽象类
 * @author Jensen
 * @date 2024-01-24
 * */
public abstract class RemoteControl {
    protected Switch aSwitch;

    public RemoteControl(Switch aSwitch) {
        this.aSwitch = aSwitch;
    }
    public abstract void On();
    public abstract void Off();
}

创建AdvancedRemoteControl扩展抽象类

AdvancedRemoteControl 拓展了RemoteControl 的抽象方法,可以在拓展处添加额外的功能

/**
 * 控制抽象类的扩展
 * @author Jensen
 * @date 2024-01-24
 * */
public class AdvancedRemoteControl extends RemoteControl{
    public AdvancedRemoteControl(Switch aSwitch) {
        super(aSwitch);
    }

    @Override
    public void On() {
        aSwitch.turnOn();
    }

    @Override
    public void Off() {
        aSwitch.turnOff();
    }
}

测试使用

分别对电脑和手机进行开机和关机的控制

System.out.println("------------------------------桥接模式-----------------------------");
Switch computer1 = new ComputerImpl();
Switch phone = new Phone();
RemoteControl controlComputer = new AdvancedRemoteControl(computer1);
RemoteControl controlPhone = new AdvancedRemoteControl(phone);
controlComputer.On();
controlPhone.On();
controlComputer.Off();
controlPhone.Off();

image.png

结语

在一些流行的日志框架,如Log4jLogback,也使用了桥接模式。它们定义了一个抽象的日志记录接口,而具体的日志记录实现则是不同的日志记录器(如控制台日志记录器、文件日志记录器等)。

还有Java AWTSwing 中的图形界面组件也是使用了桥接模式。抽象部分是图形界面组件的功能,而实现部分则是对应操作系统平台上的实际图形界面组件的实现。