学习目标:
- 桥接模式举个例子简单理解
学习内容:
简要介绍
桥接模式(Bridge Pattern)是一种结构型设计模式,它主要用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过提供一个接口,将一个或多个抽象类与它们的实现类解耦,从而实现这种分离。
简单例子:绘图软件
假设我们有一个绘图软件,它支持两种类型的图形:圆形和矩形,同时支持两种不同的渲染方式:矢量渲染和光栅渲染。
抽象部分
我们有一个Shape接口,它定义了所有图形的基本操作,比如绘制(draw)。
public interface Shape {void draw();
}
然后,我们有具体的图形类实现这个接口:
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}
}
实现部分
接下来,我们有一个Renderer接口,它定义了渲染的逻辑:
public interface Renderer {void render();
}
然后,我们有具体的渲染器类实现这个接口:
public class VectorRenderer implements Renderer {@Overridepublic void render() {System.out.println("Vector rendering.");}
}public class RasterRenderer implements Renderer {@Overridepublic 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);}@Overridepublic void draw() {renderer.render();System.out.println("Drawing a circle.");}
}public class RectangleImpl extends ShapeImpl {public RectangleImpl(Renderer renderer) {super(renderer);}@Overridepublic 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.}
}
通过桥接模式,我们可以在不修改图形类的情况下,增加新的渲染方式,或者在不修改渲染器的情况下,增加新的图形类型。这样,系统变得更加灵活和可扩展。