桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
- 桥接接口
/**
* 画(桥接的接口)
*
* @author 吴尚慧
* @since 2022/6/25 18:05
*/
public interface DrawAPI {
/**
* 画圆接口
*
* @param radius 半径
* @param x x坐标
* @param y y坐标
*/
public void drawCircle(int radius, int x, int y);
}
- 桥接接口实现类
/**
* 绿色的圆
*
* @author 吴尚慧
* @since 2022/6/25 18:06
*/
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("画圆[ 颜色: 绿色, 半径: " + radius + ", x: " + x + ", " + y + "]");
}
}
/**
* 红色的圆
*
* @author 吴尚慧
* @since 2022/6/25 18:06
*/
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("画圆[ 颜色: 红色, 半径: " + radius + ", x: " + x + ", " + y + "]");
}
}
- 抽象类
/**
* 形状抽象类
*
* @author 吴尚慧
* @since 2022/6/25 18:10
*/
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
- 抽象类的实体类
/**
* @author 吴尚慧
* @since 2022/6/25 18:11
*/
public class Circle extends Shape {
/**
* x坐标
* y坐标
* 半径
*/
private int x, y, radius;
public Circle(int x, int y, int radius, DrawAPI drawAPI) {
super(drawAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
public void draw() {
drawAPI.drawCircle(radius, x, y);
}
}
- 测试类
/**
* 测试类
*
* @author 吴尚慧
* @since 2022/6/25 18:12
*/
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(100, 100, 10, new RedCircle());
Shape greenCircle = new Circle(100, 100, 10, new GreenCircle());
redCircle.draw();
greenCircle.draw();
}
}
结果:
画圆[ 颜色: 红色, 半径: 10, x: 100, 100]
画圆[ 颜色: 绿色, 半径: 10, x: 100, 100]
参考:
https://www.runoob.com/design-pattern/design-pattern-intro.html