桥接模式举个例子简单理解

学习目标:

  • 桥接模式举个例子简单理解

学习内容:

简要介绍

桥接模式(Bridge Pattern)是一种结构型设计模式,它主要用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过提供一个接口,将一个或多个抽象类与它们的实现类解耦,从而实现这种分离。

简单例子:绘图软件

假设我们有一个绘图软件,它支持两种类型的图形:圆形和矩形,同时支持两种不同的渲染方式:矢量渲染和光栅渲染。

抽象部分

我们有一个Shape接口,它定义了所有图形的基本操作,比如绘制(draw)。

public interface Shape {
    void draw();
}

然后,我们有具体的图形类实现这个接口:

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle.");
    }
}

实现部分

接下来,我们有一个Renderer接口,它定义了渲染的逻辑:

public interface Renderer {
    void render();
}

然后,我们有具体的渲染器类实现这个接口:

public class VectorRenderer implements Renderer {
    @Override
    public void render() {
        System.out.println("Vector rendering.");
    }
}

public class RasterRenderer implements Renderer {
    @Override
    public void render() {
        System.out.println("Raster rendering.");
    }
}

桥接模式的实现

现在,我们将抽象部分和实现部分结合起来。每个图形类都有一个Renderer对象,这样,图形类就可以委托给渲染器来执行渲染操作:

public abstract class ShapeImpl {
    protected Renderer renderer;

    public ShapeImpl(Renderer renderer) {
        this.renderer = renderer;
    }

    public abstract void draw();
}

public class CircleImpl extends ShapeImpl {
    public CircleImpl(Renderer renderer) {
        super(renderer);
    }

    @Override
    public void draw() {
        renderer.render();
        System.out.println("Drawing a circle.");
    }
}

public class RectangleImpl extends ShapeImpl {
    public RectangleImpl(Renderer renderer) {
        super(renderer);
    }

    @Override
    public void draw() {
        renderer.render();
        System.out.println("Drawing a rectangle.");
    }
}

使用桥接模式

现在,我们可以独立地变化图形类型和渲染方式:

public class Client {
    public static void main(String[] args) {
        Shape circle = new CircleImpl(new VectorRenderer());
        circle.draw(); // 输出: Vector rendering. Drawing a circle.

        Shape rectangle = new RectangleImpl(new RasterRenderer());
        rectangle.draw(); // 输出: Raster rendering. Drawing a rectangle.
    }
}

通过桥接模式,我们可以在不修改图形类的情况下,增加新的渲染方式,或者在不修改渲染器的情况下,增加新的图形类型。这样,系统变得更加灵活和可扩展。


相关推荐

  1. 模式例子简单理解

    2024-05-16 04:24:09       29 阅读
  2. 模式简介

    2024-05-16 04:24:09       43 阅读
  3. 例子说明联邦学习

    2024-05-16 04:24:09       38 阅读
  4. DP讨论——适配器、模式等通用理解

    2024-05-16 04:24:09       22 阅读
  5. 设计模式

    2024-05-16 04:24:09       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 04:24:09       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 04:24:09       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 04:24:09       82 阅读
  4. Python语言-面向对象

    2024-05-16 04:24:09       91 阅读

热门阅读

  1. js的跳转传参方式

    2024-05-16 04:24:09       30 阅读
  2. 一文了解Python跨包引用其他模块

    2024-05-16 04:24:09       31 阅读
  3. AWS简介

    AWS简介

    2024-05-16 04:24:09      32 阅读
  4. mqtt定时脚本

    2024-05-16 04:24:09       34 阅读
  5. Rust中的单元测试

    2024-05-16 04:24:09       33 阅读
  6. hssd数据集进一步简介

    2024-05-16 04:24:09       33 阅读
  7. Android 14.0 frameworks添加自定义服务

    2024-05-16 04:24:09       32 阅读
  8. 【Web后端】请求头

    2024-05-16 04:24:09       29 阅读
  9. 安卓手机APP开发__支持不同的平台版本

    2024-05-16 04:24:09       26 阅读
  10. Android OpenMAX(八)如何学习OMXNodeInstance

    2024-05-16 04:24:09       33 阅读