1. 定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
2. 角色
- Abstraction:抽象类
- RefinedAbstraction:扩充抽象类
- Implementor:实现类接口
- ConcreteImplementor:具体实现类
3. 特点
- 优点:分离了抽象接口及其实现部分,提高了系统的可扩充性。
- 缺点:增加了系统的理解与设计难度。
4. 示例
笔有许多种类型,并且可以用不同颜色的笔水,以下将笔作为抽象类,颜色作为实现类接口。
Pen:
public abstract class Pen {
public Color color;
public Pen(Color color) {
this.color = color;
}
public abstract void draw(String name);
}
扩充实现类(即笔的具体实现类):
// Pencil
public class Pencil extends Pen{
String penType = "pencil";
public Pencil(Color color) {
super(color);
this.penType = penType;
}
@Override
public void draw(String name) {
color.paint(penType, name);
}
}
// BallPen
public class BallPen extends Pen {
String penType = "ball pen";
public BallPen(Color color) {
super(color);
this.penType = penType;
}
@Override
public void draw(String name) {
color.paint(penType, name);
}
}
Color:
public interface Color {
void paint(String penType, String name);
}
具体颜色的实现类:
// RedColor
public class RedColor implements Color {
@Override
public void paint(String penType, String name) {
System.out.println("red " + penType + " to draw " + name);
}
}
// BlueColor
public class BlueColor implements Color {
@Override
public void paint(String penType, String name) {
System.out.println("blue " + penType + " to draw " + name);
}
}
测试类:
public class TestBridge {
public static void main(String[] args) {
Pen pencil = new Pencil(new RedColor());
Pen ballPen = new BallPen(new BlueColor());
pencil.draw("flowers");
ballPen.draw("sky");
}
}
// 输出
// red pencil to draw flowers
// blue ball pen to draw sky
参考:
1. 《Head First 设计模式》
2. 《图说设计模式》https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/bridge.html