Java桥接模式
1 Java桥接模式的介绍
桥接模式将定义与其实现分离。 它是一种结构模式。
桥接(Bridge)模式涉及充当桥接的接口。桥接使得具体类与接口实现者类无关。
这两种类型的类可以改变但不会影响对方。
当需要将抽象与其实现去耦合时使用桥接解耦(分离),使得两者可以独立地变化。这种类型的设计模式属于结构模式,因为此模式通过在它们之间提供桥接结构来将实现类和抽象类解耦(分离)。
这种模式涉及一个接口,作为一个桥梁,使得具体类的功能独立于接口实现类。两种类型的类可以在结构上改变而不彼此影响。
通过以下示例展示了桥接(Bridge)模式的使用,实现使用相同的抽象类方法但不同的网桥实现器类来绘制不同颜色的圆形。
2 Java桥接模式的好处
- 桥接模式使实现与接口分离。
- 桥接模式提高了可扩展性。
- 桥接模式允许向客户端隐藏实施细节。
3 Java桥接模式的用法
- 当您不希望在函数抽象及其实现之间建立永久绑定时。
- 当需要使用子类扩展功能抽象及其实现时。
- 它主要用于那些对实现进行更改不会影响客户端的地方。
4 Java桥接模式的UML
假设有一个DrawAPI接口作为一个桥梁实现者,具体类RedCircle,GreenCircle实现这个DrawAPI接口。 Shape是一个抽象类,将使用DrawAPI的对象。 BridgePatternDemo这是一个演示类,将使用Shape类来绘制不同彩色的圆形。
5 Java桥接模式的案例
5.1 创建桥实现者接口
DrawAPI.java:
/**
* 一点教程网: http://www.yiidian.com
*/
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
5.2 创建实现DrawAPI接口的具体桥接实现者类
RedCircle.java:
/**
* 一点教程网: http://www.yiidian.com
*/
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
}
}
GreenCircle.java:
/**
* 一点教程网: http://www.yiidian.com
*/
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
}
}
5.3 使用DrawAPI接口创建一个抽象类Shape
Shape.java:
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
5.4 创建实现Shape接口的具体类
Circle.java:
public class Circle extends Shape {
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);
}
}
5.5 使用Shape和DrawAPI类来绘制不同的彩色圆形
BridgePatternDemo.java:
/**
* 一点教程网: http://www.yiidian.com
*/
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();
}
}
5.6 输出结果
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]
热门文章
优秀文章