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

yizhihongxing

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日

相关文章

  • java 将字符串追加到文件已有内容后面的操作

    将字符串追加到文件已有内容后面是一个常见的操作,实现这个操作涉及到Java中的文件操作、字符编码、IO流等多个概念和技术。 以下是一份完整的攻略,介绍如何实现在Java中将字符串追加到文件已有内容后面。 第一步:打开文件并读取其内容 使用File类和FileReader类可以打开一个文件并读取其内容。需要注意,FileReader类是以字符为单位读取文件内容…

    Java 2023年5月27日
    00
  • Java Apache POI报错“NotOfficeXmlFileException”的原因与解决办法

    “NotOfficeXmlFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Office Open XML格式,则可能会出现此异常。例如,可能会尝试读取旧版的Microsoft Office文件或其他非Office Open XML格式的文件。 以下是两个实例: 例1 如果文件格…

    Java 2023年5月5日
    00
  • java实现简易外卖订餐系统

    Java实现简易外卖订餐系统攻略 简介 本项目是一个简单的外卖订餐系统,使用Java语言实现,主要功能包括选择菜品,下单,查询订单等。 准备工作 在开始实现之前,我们需要完成一些准备工作。 环境准备 安装JDK,并配置环境变量。 安装Eclipse或IntelliJ IDEA等Java开发工具。 技术选型 使用Java语言编写。 使用Maven管理依赖。 使…

    Java 2023年5月18日
    00
  • Spring Boot在Web应用中基于JdbcRealm安全验证过程

    关于Spring Boot在Web应用中基于JdbcRealm安全验证的完整攻略,可以分为以下几个部分: 依赖配置 在项目的pom.xml文件中添加Shiro和JDBC驱动的依赖: <dependencies> <dependency> <groupId>org.apache.shiro</groupId> &…

    Java 2023年5月19日
    00
  • Java中List排序的三种实现方法实例

    Java中List排序的三种实现方法实例 在Java中List是一个非常常用的集合类,其用于存储和操作一组具有序列特性的对象。其中List中提供了sort()方法,用于对其中的元素进行排序操作。本文将会详细讲解Java中List排序的三种实现方法。 一、使用Collections.sort() Collections是Java中一个非常重要的集合工具类,其中…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“NullActionFormException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullActionFormException”错误。这个错误通常由以下原因之一起: 表单对象为空:如果表单对象为空,则可能会出现此。在这种情况下,需要检查表单对象以解决此问题。 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 以下是两个实例: 例 1 如果表单对…

    Java 2023年5月5日
    00
  • Spring JdbcTemplate执行数据库操作详解

    Spring JdbcTemplate执行数据库操作详解 什么是Spring JdbcTemplate? Spring JdbcTemplate是Spring框架提供的一个用于简化数据库访问和操作的工具类,它可以轻松地完成基础数据操作,如增删改查等。 Spring JdbcTemplate的主要特点包括: 简化的JDBC操作; 与Spring的事务管理集成;…

    Java 2023年6月2日
    00
  • 深入讲解Java的对象头与对象组成

    深入讲解Java的对象头与对象组成 在Java中,每个对象都有一个对象头,用来存储对象的元数据信息,同时Java对象也由对象头和实例数据两个部分组成。了解Java对象的组成可以帮助我们更好地理解Java的内存模型。 Java对象的组成 Java对象是由对象头和实例数据两个部分组成的。在64位JVM中,对象头占用16Byte,实例数据大小不定,但至少为8Byt…

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