前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式(6)桥接模式

Java设计模式(6)桥接模式

作者头像
Jensen_97
发布2024-04-18 13:03:20
670
发布2024-04-18 13:03:20
举报
文章被收录于专栏:技术客栈技术客栈

前言

?

在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(5)适配器模式》文章中,我们介绍了适配器模式。本文是这个系列的第六篇章,我们将讲解一下桥接模式的实现方式、应用场景以及它的用途。

桥接模式

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

使用场景

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

代码实现

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

定义一个控制开关接口

代码语言:javascript
复制
/**
 * 开关接口
 * @author Jensen
 * @date 2024-01-24
 * */
public interface Switch {
    void turnOn();
    void turnOff();
}

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

ComputerImpl:

代码语言:javascript
复制
/**
 * 计算机实现类
 * @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:

代码语言:javascript
复制
/**
 * 手机实现类
 * @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 定义了抽象部分的接口,并维护一个指向实现部分的引用。它通常包含对实现部分的委托方法

代码语言:javascript
复制
/**
 * 远程控制抽象类
 * @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 的抽象方法,可以在拓展处添加额外的功能

代码语言:javascript
复制
/**
 * 控制抽象类的扩展
 * @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();
    }
}

测试使用

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

代码语言:javascript
复制
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
image.png

结语

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

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 桥接模式
  • 使用场景
  • 代码实现
    • 定义一个控制开关接口
      • 创建Computer和Phone实现类,分别实现开关接口
        • 创建RemoteControl抽象类
          • 创建AdvancedRemoteControl扩展抽象类
            • 测试使用
            • 结语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com