概念
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。大白话的意思是大家在工作中,controller,service,dao这三层互相依赖完全解偶,同理这个设计模式就是让抽象类与接口完全独立出来。
场景
1、由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿
2、 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
3、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
代码实现
public interface DrawCircle {
void drawCircle(int radius, int x, int y);
}
public class DrawCircleBlank implements DrawCircle {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("半径:"+radius+"x:"+x+"y:"+y);
}
}
public class DrawCircleRed implements DrawCircle {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("半径:"+radius+"x:"+x+"y:"+y);
}
}
这是单独用接口写实现的,接下来把接口以及实现的类与抽象分离
public abstract class Shape {
protected DrawCircle drawCircle;
protected Shape(DrawCircle drawCircle){
this.drawCircle = drawCircle;
}
public abstract void drawCircle();
}
这个抽象类与接口建立关系
public class CircleShape extends Shape {
private int x, y, radius;
public CircleShape(int x, int y, int radius, DrawCircle drawCircle) {
super(drawCircle);
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public void drawCircle() {
drawCircle.drawCircle(radius,x,y);
}
}
这个相当于我们的service层,接口那个相当于dao层,接下来执行main函数
public class Main {
public static void main(String[] args){
Shape shape1 = new CircleShape(1,1,1,new DrawCircleRed());
Shape shape2 = new CircleShape(1,1,1,new DrawCircleBlank());
shape1.drawCircle();
shape2.drawCircle();
}
}
结果正确,它的设计思路要结合应用场景,然后核心思想就是把interface的具体实现部分与抽象画分开。