Java 设计模式之桥接模式

文章目录

Java 设计模式之桥接模式

概述

  • 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • 通过桥接模式,可以避免类爆炸问题,并提高系统的可扩展性。

UML

核心思想:

  • 抽象部分:定义高层的控制逻辑。
  • 实现部分:定义底层的具体实现。
  • 桥接:通过组合的方式连接抽象部分和实现部分。

角色:

  • Implementor:实现部分的接口,定义行为。
  • ConcreteImplementor:具体实现部分类,实现行为。
  • Abstraction:抽象部分的抽象类,持有实现部分的引用。
  • RefinedAbstraction:具体抽象部分类,实现具体的抽象逻辑。

例如:图形绘制中的形状和颜色。

代码实现

假设我们需要绘制不同形状(如圆形、矩形)的图形,并且这些图形可以使用不同的颜色(如红色、绿色)。使用桥接模式可以将形状和颜色分离,使它们可以独立扩展。

定义部分实现的接口:

java 复制代码
public interface Color {
    void applyColor();
}

定义具体的部分实现类:

java 复制代码
public class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("使用红色");
    }
}
java 复制代码
public class Green implements Color {
    @Override
    public void applyColor() {
        System.out.println("使用绿色");
    }
}

定义抽象实现的抽象类:

java 复制代码
public abstract class Shape {
    protected Color color;

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

    public abstract void draw();
}

定义具体的抽象实现类:

java 复制代码
public class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
        color.applyColor();
    }
}
java 复制代码
public class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形");
        color.applyColor();
    }
}

使用:

java 复制代码
public class Client {
    public static void main(String[] args) {
        Red red = new Red();
        Green green = new Green();
        Shape redCircle = new Circle(red);
        Shape greenCircle = new Circle(green);
        redCircle.draw();
        greenCircle.draw();
    }
}

输出:

复制代码
绘制圆形
使用红色
绘制圆形
使用绿色
相关推荐
captain376几秒前
ACM模式下Java输入输出函数为什么会超时?及解决方法
java·开发语言
程序员老邢5 分钟前
【产品底稿 04】商助慧 V1.1 里程碑:爬虫入库 + MySQL + Milvus 全链路打通
java·爬虫·mysql·ai·springboot·milvus
2601_950703948 分钟前
Java安全编程与静态分析实战
java
好家伙VCC8 分钟前
**发散创新:基于Python与OpenCV的视频流帧级分析实战**在当前人工智能与计算机视觉飞速发展的背景下
java·人工智能·python·计算机视觉
SimonKing9 分钟前
大V说’AI替代不了你’,但现实是——用AI的人正在替代你
java·后端·程序员
一叶龙洲25 分钟前
Java中使用模板引擎(FreeMarker / Velocity) + Word XML导出复杂Word
xml·java·word
Halo_tjn32 分钟前
Java 接口的定义重构学生管理系统
java·开发语言·算法
Albert Edison38 分钟前
【RabbitMQ】快速入门
java·分布式·rabbitmq
ch.ju40 分钟前
Java程序设计(第3版)第二章——类型转换(1)
java
XiYang-DING42 分钟前
【Java】哈希
java·哈希算法·散列表