Java结构型模式之桥接模式详解

Java结构型模式之桥接模式详解

概述

桥接模式是一种用于软件设计的结构型模式,最早由著名的设计模式书籍《设计模式:可复用面向对象软件的基础》中的Gamma等人提出。

桥接模式的主要目的是将抽象部分和实现部分分离,分别放在不同的类层次结构中,从而实现它们之间的独立变换。通过分离抽象部分和实现部分,可以使它们可以相对独立地变化,从而可以大大降低它们之间的耦合度,提高系统的可扩展性、可维护性。

结构

桥接模式的主要结构包括如下几个角色:

Abstraction(抽象部分)

抽象部分为桥接模式中的抽象类。它定义了一些抽象方法和属性,定义了一个指向 Implementor 类型对象的指针,但并不实现具体的方法,而是委派给 Implementor 类来实现。

RefinedAbstraction(扩充抽象)

扩充抽象是对抽象部分的具体实现。它实现了在抽象部分中定义的抽象方法,同时可以通过组合其他的类扩展自己的功能。

Implementor(实现部分)

实现部分是桥接模式中的实现类。它定义了一些基本的操作,但并不提供具体的实现。这些操作要交由 ConcreteImplementor 类来实现。

ConcreteImplementor(具体实现)

具体实现是实现部分的具体类。它对实现部分的操作进行了具体实现。

示例

下面是一个简单的示例,利用桥接模式实现不同颜色和形状的图形绘制:

// Implementor
interface Color {
    void applyColor();
}

// ConcreteImplementor
class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("red");
    }
}

class Blue implements Color {
    @Override
    public void applyColor() {
        System.out.println("blue");
    }
}

// Implementor
interface Shape {
    void draw();
}

// RefinedAbstraction
abstract class ShapeWithColor implements Shape {
    protected Color color;

    public ShapeWithColor(Color color) {
        this.color = color;
    }

    @Override
    public void draw() {
        color.applyColor();
        drawShape();
    }

    abstract void drawShape();
}

// ConcreteImplementor
class Circle extends ShapeWithColor {
    public Circle(Color color) {
        super(color);
    }

    @Override
    void drawShape() {
        System.out.println("draw a circle");
    }
}

class Square extends ShapeWithColor {
    public Square(Color color) {
        super(color);
    }

    @Override
    void drawShape() {
        System.out.println("draw a square");
    }
}

在上面的示例中,我们定义了两个 Implementor:Color 和 Shape,它们代表了颜色和图形的基本操作。我们还定义了两个 ConcreteImplementor:Red 和 Blue,分别代表了红色和蓝色。

在抽象部分中,我们定义了一个 ShapeWithColor 类,它基于 Shape 类型,同时需要一个 Color 类型的参数。它实现了 draw 方法,但具体的图形绘制操作 drawShape 需要由子类来实现。

最后,我们实现了两个扩充抽象:Circle 和 Square,它们代表了具体的图形。它们都继承了 ShapeWithColor 类型,因此可以在绘制图形时先绘制颜色。

下面是一个使用示例:

public static void main(String[] args) {
    Shape circle = new Circle(new Red());
    circle.draw();  // 输出 red draw a circle

    Shape square = new Square(new Blue());
    square.draw();  // 输出 blue draw a square
}

第一行代码创建了一个圆形,使用红色绘制。第二行代码创建了一个正方形,使用蓝色绘制。在执行 draw 方法时,输出了对应的颜色和图形类型。

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

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JAVA生产者消费者(线程同步)代码学习示例

    JAVA生产者消费者(线程同步)代码学习示例 什么是生产者消费者模型 生产者消费者模型是一种常用的线程同步模型,它通过在多个线程之间协调共享资源的访问,来提高系统的效率和可靠性。在生产者消费者模型中,生产者线程负责生成数据,消费者线程负责消费数据,两者通过共享队列来协作,实现生产与消费的同步和协调。 学习示例1:基本实现 假设有一个生产者线程和一个消费者线程…

    Java 2023年5月26日
    00
  • Java中的逻辑结构详解

    Java中的逻辑结构详解 什么是逻辑结构? 在计算机科学领域中,逻辑结构是程序中的控制结构,用于描述程序执行的流程。通常情况下,逻辑结构包括三种基本类型:顺序结构、选择结构和循环结构。 顺序结构 顺序结构是指程序按照一定的顺序执行,每个语句按照先后顺序执行,直到程序结束。在Java中,顺序结构是最基本的结构。 public class Example1 { …

    Java 2023年5月26日
    00
  • Java-SpringBoot-Range请求头设置实现视频分段传输

    老实说,人太懒了,现在基本都不喜欢写笔记了,但是网上有关Range请求头的文章都太水了下面是抄的一段StackOverflow的代码…自己大修改过的,写的注释挺全的,应该直接看得懂,就不解释了写的不好…只是希望能给视频网站开发的新手一点点帮助吧. 业务场景:视频分段传输、视频多段传输(理论上配合前端能实现视频预览功能, 没有尝试过)下面是API测试图…

    Java 2023年4月19日
    00
  • java编程SpringSecurity入门原理及应用简介

    Java编程Spring Security入门原理及应用简介攻略 Spring Security是一款基于Spring框架的安全框架,它为我们的Java应用程序提供了一种全面的安全解决方案。 本篇攻略将一步步地介绍Spring Security的入门原理,以及如何在Java编程中应用Spring Security。 Spring Security的入门原理 …

    Java 2023年5月20日
    00
  • json-lib将json格式的字符串,转化为java对象的实例

    要将 JSON 格式的字符串转化为 Java 对象实例,可以使用 json-lib 库提供的方法。下面是具体的步骤。 1. 引入 json-lib 库 在项目中引入 json-lib 库,可以使用 Maven 或手动下载方式引入。以下是 Maven 依赖的示例: <dependency> <groupId>net.sf.json-li…

    Java 2023年5月26日
    00
  • 如何用Dos命令运行Java版HelloWorld你知道吗

    当你要在DOS命令提示符下运行Java程序时,需要打开一个命令行界面,进入Java程序所在的目录,然后使用特定的命令执行该程序。 以下是在DOS命令提示符下运行Java程序的完整攻略: 步骤一:安装Java 在运行Java程序之前,你必须先安装Java开发工具包(JDK)。你可以从Oracle官网上下载并安装适用于您的操作系统的Java JDK版本。安装完成…

    Java 2023年5月26日
    00
  • 浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt) MD5加密 MD5算法是一种散列函数,可以将任意长度的数据转化成一定长的散列值。通常用于密码加密。使用Java自带包java.security.MessageDigest中的getInstance(“MD5”)方法获取MD5的实例,加密方式如下: import java.se…

    Java 2023年6月3日
    00
  • java连接MySQl数据库实例代码

    Java连接MySQL数据库需要以下几个步骤: 下载MySQL的Java驱动 加载驱动 建立连接 创建Statement对象 执行SQL语句 处理结果集 关闭结果集,Statement和连接 下面是一个完整的示例代码: // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 S…

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