Java设计模式之java桥接模式详解

Java设计模式之java桥接模式详解

什么是Java桥接模式?

Java桥接模式是23种常用的设计模式之一,也称为桥梁模式。它是一个两层结构,其中底层定义了实现,而高层定义了抽象。抽象层通过委托调用实现层中的方法,以实现业务需求。这种模式可以将抽象部分与它的实现部分分离,使它们可以独立地变化。

应用场景

Java桥接模式常用于以下场景:

  • 当需要避免使用由于多重继承导致的类层次结构扩展时;
  • 当希望在抽象部分和实现部分之间建立一个稳定的联系,以便在两者之间随时切换时;
  • 当希望改变一个已有的类的实现接口时;
  • 当将实现部分与抽象部分分离开来,以便两者可以独立地进行变化时。

代码实现

抽象类

首先,我们需要定义一个抽象类,它会委托实现类中的方法来完成具体业务操作。抽象类定义了一个成员变量 im,其类型为 Implementor,表示实现类,以及一个抽象方法 operation()

public abstract class Abstraction {
    protected Implementor im;

    protected Abstraction(Implementor im) {
        this.im = im;
    }

    public abstract void operation();
}

抽象类的具体实现类

我们接着定义一个具体实现类,它继承自上述定义的抽象类,并实现了 operation() 方法:

public class RefinedAbstraction extends Abstraction {
    protected RefinedAbstraction(Implementor im) {
        super(im);
    }

    @Override
    public void operation() {
        System.out.println("RefinedAbstraction.operation()");
        im.operationImp();
    }
}

其中,operation() 方法打印一条消息,然后通过委托调用实现类的 operationImp() 方法来完成业务操作。

实现类

接下来,我们定义一个实现类,它实现了 Implementor 接口:

public interface Implementor {
    void operationImp();
}

public class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImp() {
        System.out.println("ConcreteImplementorA.operationImp()");
    }
}

public class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImp() {
        System.out.println("ConcreteImplementorB.operationImp()");
    }
}

实现类中实现了 operationImp() 方法,该方法打印一条消息。

示例

下面是一个使用 Java 桥接模式的示例:

Implementor impleA = new ConcreteImplementorA();
Abstraction abs = new RefinedAbstraction(impleA);
abs.operation();

Implementor impleB = new ConcreteImplementorB();
abs = new RefinedAbstraction(impleB);
abs.operation();

输出结果为:

RefinedAbstraction.operation()
ConcreteImplementorA.operationImp()
RefinedAbstraction.operation()
ConcreteImplementorB.operationImp()

该示例中,我们先创建了一个 ConcreteImplementorA 类型的实现类,并传递给 RefinedAbstraction 抽象类,然后调用 operation() 方法,输出了一条消息和 ConcreteImplementorA.operationImp() 方法的结果。

接着,我们创建了一个 ConcreteImplementorB 类型的实现类,并传递给 RefinedAbstraction 抽象类,再次调用 operation() 方法,输出了一条消息和 ConcreteImplementorB.operationImp() 方法的结果。

总结

Java桥接模式可将抽象部分与它的实现部分分离,使它们可以独立地变化。该模式通常用于需要独立变化不同的实现部分时,如操作系统平台和操作系统接口的变化等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java设计模式之java桥接模式详解 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Spring的初始化和XML解析的实现

    下面我就来详细讲解一下Spring的初始化和XML解析的实现攻略。 Spring的初始化 Spring的初始化可以分为两步: 加载配置文件 实例化对象 加载配置文件 在Spring初始化的过程中,首先会加载XML配置文件并创建IoC容器。Spring的XML配置文件默认命名为applicationContext.xml,当然也可以自定义文件名。 Spring…

    Java 2023年5月19日
    00
  • Java集合功能与用法实例详解

    Java集合功能与用法实例详解 Java集合是Java编程语言中的一种容器,可以存储和操作对象。Java集合提供了一组接口和类,用于快速创建各种不同类型的集合,如列表(List)、集(Set)、图(Map)等。在本文中,我们将详细探讨Java集合的功能和用法,并提供两个实例说明。 Java集合的分类 Java集合被分为以下三个主要类别: List:列表类集合…

    Java 2023年5月26日
    00
  • java中的IO流

    下面是 Java 中的 IO 流的完整攻略。 一、IO 概述 IO(Input/Output)指输入/输出,是程序与外界交互的重要途径之一。在 Java 中,IO 操作分为“字节流”和“字符流”两大类。其中,“字节流”以字节为单位进行输入/输出,而“字符流”以字符为单位进行输入/输出。 二、字节流 字节流中,InputStream 和 OutputStrea…

    Java 2023年5月20日
    00
  • Java的wait(), notify()和notifyAll()使用心得

    Java 中的 wait(), notify() 和 notifyAll() 方法 介绍 在 Java 中,线程是独立执行的,但是在某些情况下,我们希望线程之间能够进行同步和通信。这时,Java 提供了一些同步机制。其中,使用最广泛的机制就是对象的 wait()、notify() 和 notifyAll() 方法。 线程可以通过调用 wait() 方法来等待…

    Java 2023年5月26日
    00
  • Java算法设计与分析分治算法

    Java算法设计与分析之分治算法 什么是分治算法 分治算法是一种用于解决问题的基本算法思想。其核心思想是将待解决的问题划分成若干个规模较小但结构与原问题相似的子问题,递归地求解这些子问题,然后将这些子问题的解组合成原问题的解。 分治算法一般由三个步骤组成: 分解:将要解决的问题划分成若干规模较小的子问题。 解决:递归地求解子问题。 合并:将子问题的解合并成原…

    Java 2023年5月19日
    00
  • Java深入浅出数组的定义与使用上篇

    我来为你讲解一下“Java深入浅出数组的定义与使用上篇”的完整攻略。 标题 标题应该使用Markdown语法中的“#”,一级标题用“#”表示,二级标题用“##”表示,以此类推。这篇攻略的一级标题可以命名为“Java深入浅出数组的定义与使用上篇”。 正文 在开始正文之前,需要简单介绍一下本文主要讲解的内容。本篇攻略主要分为三个部分,分别是数组的定义、数组的初始…

    Java 2023年5月26日
    00
  • Spring boot配置绑定和配置属性校验的方式详解

    以下是关于“Spring boot配置绑定和配置属性校验的方式详解”的完整攻略,包含两个示例说明。 Spring boot配置绑定和配置属性校验的方式详解 背景 在开发 Spring Boot 应用时,我们经常需要配置一些参数,比如数据库连接信息、服务端口等等。而在应用部署时,这些参数也需要灵活地根据不同的环境进行配置,比如开发环境、测试环境、生产环境等等。…

    Java 2023年6月15日
    00
  • java计算工作时间除去节假日以及双休日

    要计算Java中工作时间(即除去节假日和双休日),一般的做法是使用第三方库或者手动编写代码来计算时间间隔并排除非工作日的时间。下面是两种实现方式的介绍。 使用第三方库 Java中有一些第三方库可以方便地计算时间间隔并排除非工作日。其中一种比较常用的是Joda-Time库。在计算时间间隔时,可以使用Period类,该类可以计算两个日期之间的天数、小时数、分钟数…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部