源自:http://www.blogjava.net/flustar/archive/2007/11/28/bridge.html
Bridge桥接模式:
将抽象与其实现解耦,使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。
例子:
public abstract class Drawing {
public abstract void drawLine();
public abstract void drawCircle();
}
public class DP1 {
public static void draw_a_line(){
System.out.println("使用DP1的draw_a_line()画线");
}
public static void draw_a_circle(){
System.out.println("使用DP1的draw_a_circle()画圆");
}
}
public class DP2 {
public static void drawLine() {
System.out.println("使用DP2的drawLine()画线");
}
public static void drawCircle() {
System.out.println("使用DP2的drawCircle()画圆");
}
}
public class V1Drawing extends Drawing {
public void drawCircle() {
DP1.draw_a_circle();
}
public void drawLine() {
DP1.draw_a_line();
}
}
public class V2Drawing extends Drawing {
public void drawLine(){
DP2.drawLine();
}
public void drawCircle(){
DP2.drawCircle();
}
}
public abstract class Shape {
protected Drawing myDrawing;
abstract public void draw();
Shape(Drawing drawing) {
myDrawing = drawing;
}
protected void drawLine() {
myDrawing.drawLine();
}
protected void drawCircle() {
myDrawing.drawCircle();
}
}
public class Rectangle extends Shape {
Rectangle(Drawing drawing) {
super(drawing);
}
public void draw() {
drawLine();
drawLine();
drawLine();
drawLine();
}
}
public class Circle extends Shape {
Circle(Drawing drawing) {
super(drawing);
}
public void draw() {
myDrawing.drawCircle();
}
}
public class BridgeClient {
public static void main(String[] args) {
Drawing draw1 = new V1Drawing();
Drawing draw2 = new V2Drawing();
Shape shape1 = new Rectangle(draw1);
shape1.draw();
Shape shape2 = new Circle(draw2);
shape2.draw();
}
}