学习目标:
- 桥接模式举个例子简单理解
学习内容:
简要介绍
桥接模式(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.
}
}
通过桥接模式,我们可以在不修改图形类的情况下,增加新的渲染方式,或者在不修改渲染器的情况下,增加新的图形类型。这样,系统变得更加灵活和可扩展。