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

学习目标:

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

学习内容:

简要介绍

桥接模式(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.
    }
}

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


  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java 猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值