结构型模式-桥接模式
桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
举个例子:绘制一个图形包含形状和颜色,有三角形、正方形、圆形以及黄色、红色、蓝色,如果要创建图形可能机会创建为这样:
如果要增加一个新的颜色需要添加3个类,如果增加一个新的图形需要增加4个类。
换一种方法,将形状和颜色抽象出来就可以变为这样:
如果要新增加一个颜色添加一个类就可以,形状也是。
这种就是桥接模式的应用,对有两个维度变化的对象来说,使用桥接模式可以更好的扩展系统。
代码实现
颜色接口
public interface Color {
void addColor();
}
黄色实现类
public class YellowColor implements Color{
@Override
public void addColor() {
System.out.println("添加黄色....");
}
}
红色实现类
public class RedColor implements Color{
@Override
public void addColor() {
System.out.println("添加红色.....");
}
}
形状抽象类
public abstract class Shape {
//设置颜色
protected Color color;
public Shape(Color color) {
this.color = color;
}
public abstract void drawShape();
}
三角形实现类
public class DeltaShape extends Shape{
public DeltaShape(Color color) {
super(color);
}
@Override
public void drawShape() {
System.out.println("绘制三角形");
this.color.addColor();
}
}
圆形实现类
public class CircularShape extends Shape{
public CircularShape(Color color) {
super(color);
}
@Override
public void drawShape() {
System.out.println("绘制圆形....");
this.color.addColor();
}
}
测试
public static void main(String[] args) {
Shape shape = new CircularShape(new YellowColor());
shape.drawShape();
}
贴一张类图结构:
桥接模式分离了抽象和实现部分,提高了系统的可扩展性,缺点就是增加了系统的理解和设计难度。
适用场景:
-
抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响。
-
一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
-
不希望使用继承或因为多层次继承导致系统类的个数急剧增加的场景。