桥接模式(Bridge)
定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
使用场景
主要角色
- 抽象部分(Abstraction): 定义了系统的高层结构,维护一个对实现部分的引用,并定义了抽象部分的接口。抽象部分的实现通常委托给实现部分。
- 扩展抽象部分(RefinedAbstraction): 继承自抽象部分,对抽象部分的接口进行扩展或增强,通常包含一些高层次的业务逻辑。
- 实现部分(Implementor): 定义了抽象部分规定的接口,并为这些接口提供具体的实现。实现部分的变化不会影响抽象部分,两者通过组合关系而不是继承关系建立联系。
- 具体实现部分(ConcreteImplementor): 继承自实现部分接口,实现具体的业务逻辑。系统可能有多个具体实现部分,它们可以在运行时替换而不影响抽象部分。
类图
示例代码
代码语言:javascript复制public abstract class Shape {
protected Color color;
public Shape(Color color) {
this.color = color;
}
abstract void draw();
}
代码语言:javascript复制public class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
void draw() {
System.out.println(color.getColor() " Circle");
}
}
代码语言:javascript复制public class Square extends Shape {
public Square(Color color) {
super(color);
}
@Override
void draw() {
System.out.print(color.getColor() " Square");
}
}
代码语言:javascript复制public interface Color {
String getColor();
}
代码语言:javascript复制public class Red implements Color {
@Override
public String getColor() {
return "Red";
}
}
代码语言:javascript复制public class Green implements Color {
@Override
public String getColor() {
return "Green";
}
}
代码语言:javascript复制public class Client {
public static void main(String[] args) {
Shape redCircle = new Circle(new Red());
Shape greenSquare = new Square(new Green());
redCircle.draw();
greenSquare.draw();
}
}
代码语言:javascript复制Red Circle
Green Square