- 桥接模式
将抽象部分与它的实现部分分离,使他们可以独立的变化。如果对象设计存在多个维度,我们就可以把多个维度进行分离,例如,我们需要画出一个带颜色的形状,这里形状有圆形、矩形、正方形等等,颜色就更多,例如红橙黄绿等等,这里我们就可以将形状分离出两个层次:形状和颜色。这就需要使用桥接模式来处理。 - 桥接模式的类图
从类图中可以看出这个系统具有两个等级结构:- 由抽象化角色和继承该抽象化角色的具体角色组成的抽象化等级结构。
- 由实现化角色和两个具体实现化角色所组成的实现化等级结构。
桥接模式所包含的角色:
- 抽象化角色: 一般是抽象类,持有一个实现化角色,
- 扩充抽象化角色: 扩充了抽象化角色定义的接口,一般情况下都是具体的类。改变和扩孔了抽象化角色的方法。
- 实现类接口角色: 这个角色一般是接口的形式,但是不给出具体的实现,这里有一点要说明,这个借口和抽象化角色的定义不一定相同,实际上,两个角色可以非常不一样。
- 具体实现化角色: 这个角色实现了实现类接口角色,并且有具体的实现。
- 桥接模式示例代码:
场景:就以上面画带颜色的形状为例。
抽象化角色:(形状)
public abstract class Shape {
private Color color;
public Shape(Color color) {
this.color = color;
}
public abstract void drowShape();
}
扩充抽象化角色:(各种形状)
圆形:
public class Circle extends Shape {
private Color color;
public Circle(Color color) {
super(color);
this.color = color;
}
@Override
public void drowShape() {
System.out.println("我画的事圆形......");
color.addColor();
}
}
正方形:
public class Square extends Shape {
private Color color;
public Square(Color color) {
super(color);
this.color = color;
}
@Override
public void drowShape() {
System.out.println("我是正方形。。。。");
color.addColor();
}
}
实现类接口角色:(颜色接口)
public interface Color {
void addColor();
}
具体实现化角色:(各种具体角色)
蓝色:
public class ColorBlue implements Color {
@Override
public void addColor() {
System.out.println("我要涂蓝色.....");
}
}
红色:
public class ColorRed implements Color{
@Override
public void addColor() {
System.out.println("我来涂红色了.....");
}
}
黄色:
public class ColorYellow implements Color {
@Override
public void addColor() {
System.out.println("我来涂黄色.......");
}
}
测试主函数:
public class Main {
public static void main(String[] args) {
Color color;
Shape shape;
color = new ColorRed();
shape = new Circle(color);
shape.drowShape();
color = new ColorBlue();
shape = new Square(color);
shape.drowShape();
}
}
- 桥接模式的优缺点:
优点:
1.分离抽象接口及其实现部分。桥接模式使用对象间的关联关系,解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度变化。所谓抽象和实现沿着各自的维度变化,也就是说,抽象和实现不再在同一继承层次结构中,而是子类化他们。使得他们都具有各自的子类,以便于更具方便的排列组合。
2.桥接模式替代了多层继承,比起多层继承来说,桥接模式可以极大的减少子类的个数。
3.桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。
缺点:
增加系统的理解与设计难度。对开发者在最初设计的时候的能力要求相对较高