设计模式学习笔记(四)—Bridge桥接模式
设计模式》一书对Bridge是这样描述的:
将抽象与其实现解耦,使它们都可以独立地变化。
大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其
派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。下面
是《Design Patterns Explained》书中的例子。其结构图如下:

下面是它的实现:
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(); }}class Rectangle extends Shape{ public Rectangle(Drawing darw){ super(darw); } public void draw(){ drawLine(); drawLine(); drawLine(); drawLine(); }} class Circle extends Shape{ public Circle(Drawing draw){ super(draw); } publicvoid draw(){ myDrawing.drawCircle(); }}abstract class Drawing{ abstract public void drawLine(); abstract public void drawCircle();}class V1Drawing extends Drawing{ public void drawLine(){ DP1.draw_a_line(); } public void drawCircle(){ DP1.draw_a_circle(); }}class V2Drawing extends Drawing{ public void drawLine(){ DP2.drawLine(); } public void drawCircle(){ DP2.drawCircle(); }}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()画圆"); }}class DP2{ public static void drawLine(){ System.out.println("使用DP2的drawLine()画线"); } public static void drawCircle(){ System.out.println("使用DP2的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(); }}