设计模式 7:桥接模式
定义与目的
- 定义 :桥接模式将
抽象部分
与它的实现部分
分离,使得它们都可以独立地变化。 - 目的 :该模式的主要目的是解耦一个类的
抽象部分
与其实现部分
,使得这两部分可以独立地发展和变化。
实现示例
假设我们有一个图形库,需要支持不同平台上的图形绘制。我们可以使用桥接模式来实现这个需求。
java
// 定义抽象部分 - 图形接口
public interface Shape {
void draw();
}
// 定义实现部分 - 绘图接口
public interface DrawAPI {
void draw();
}
// 具体实现 - 圆形
public class Circle implements Shape {
private int x, y, radius;
private DrawAPI drawAPI;
public Circle(int x, int y, int radius, DrawAPI drawAPI) {
this.x = x;
this.y = y;
this.radius = radius;
this.drawAPI = drawAPI;
}
@Override
public void draw() {
drawAPI.draw();
System.out.println("Drawing a circle with x: " + x + ", y: " + y + ", radius: " + radius);
}
}
// 具体实现 - Windows 平台绘图
public class WindowsDrawAPI implements DrawAPI {
@Override
public void draw() {
System.out.println("Drawing using Windows API");
}
}
// 具体实现 - MacOS 平台绘图
public class MacOsDrawAPI implements DrawAPI {
@Override
public void draw() {
System.out.println("Drawing using MacOS API");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
DrawAPI windowsDrawAPI = new WindowsDrawAPI();
DrawAPI macOsDrawAPI = new MacOsDrawAPI();
Shape circleWindows = new Circle(100, 100, 10, windowsDrawAPI);
Shape circleMacOs = new Circle(100, 100, 10, macOsDrawAPI);
circleWindows.draw();
circleMacOs.draw();
}
}
使用场景
- 当你需要在抽象和实现之间建立一个松散耦合的关系时。
- 当你需要独立地扩展抽象和实现的层次结构时。
- 当一个类的实现细节不应该影响到使用它的客户时。
桥接模式通过将抽象与实现分离,使得两者可以独立地变化和发展。这对于需要在不同的平台上提供相同功能的应用程序非常有用。
小结
桥接模式是一种常用的结构型模式,它可以帮助你解耦抽象与实现,使得两者可以独立地发展。这在需要支持多平台或多版本的系统中特别有用,因为它可以减少代码的重复,并提高系统的可维护性。