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

2024-04-18 13:03:20 浏览数 (1)

前言

在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在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.pngimage.png

结语

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

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

0 人点赞