概述
桥接模式 :Bridge Pattern: 是一种结构型设计模式。
旨在将抽象部分
与实现部分
分离,使它们可以独立变化。
它通过组合代替继承,解决类爆炸问题,并提高系统的灵活性和可扩展性。
组成部分
【抽象部分】(Abstraction):定义高层控制逻辑,并包含一个对实现部分的引用。
扩展抽象部分(Refined Abstraction):对抽象部分的扩展,提供更多控制逻辑。
【实现部分】(Implementor):定义底层操作的接口,供抽象部分调用。
具体实现部分(Concrete Implementor):实现实现部分的接口,提供具体操作。
一个背景案例
画图 : 画 不同形状的、不同颜色的 图形。
例如 : 三角形-红色的;三角形-绿色的;圆形-红色的;圆形-绿色的;
分析 : 把形状定位为 抽象的部分
,把填充颜色定位为具体实现部分
;画图形的时候,组合颜色一并填充。
当需要新增 形状 or 颜色 的时候,只需要新增一个类即可,在使用时可以自由组合。
实际上,此处的这个 Shap 抽象类,就相当于一个桥的作用
。
类图结构如下:
实现部分- Color
public interface Color {
void fillColor();
}
public class ColorRed implements Color{
@Override
public void fillColor() {
System.out.println("填充红色");
}
}
public class ColorGreen implements Color{
@Override
public void fillColor() {
System.out.println("填充绿色");
}
}
抽象部分-Shap
public abstract class Shap {
// 聚合 Color
protected Color color;
public Shap(Color color) {
this.color = color;
}
public abstract void draw();
}
public class ShapTriangle extends Shap{
public ShapTriangle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("绘制三角形");
color.fillColor();
}
}
public class ShapCircle extends Shap{
public ShapCircle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("画圆");
color.fillColor();
}
}
测试类
public class Test {
public static void main(String[] args) {
// 一个颜色的实现对象
Color colorGreen = new ColorGreen();
// 绘制不同的形状,组合上对应的颜色对象
Shap shapCircle = new ShapCircle(colorGreen);
shapCircle.draw();
Shap shapTriangle = new ShapTriangle(colorGreen);
shapTriangle.draw();
}
}
执行效果:
画圆
填充绿色
绘制三角形
填充绿色