设计模式之(七)--桥接模式(bridge)

    技术2022-05-19  19

    《设计模式》一书对Bridge是这样描述的:将抽象与其实现解耦,使它们都可以独立地变化

    代码如下:

    是《Design Patterns Explained》书中的例子。其结构图如下:

    //图形接口 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 abstract class Drawing { public abstract void drawLine(); public abstract void 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(); } } //画线与画圆实现1 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()画圆"); } } //画线与画圆实现2 public class DP2 { public static void drawLine() { System.out.println("使用DP2的drawLine()画线"); } public static void drawCircle() { System.out.println("使用DP2的drawCircle()画圆"); } } //操作实现1 public class V1Drawing extends Drawing { public void drawCircle() { DP1.draw_a_circle(); } public void drawLine() { DP1.draw_a_line(); } } //操作实现2 public class V2Drawing extends Drawing { public void drawLine() { DP2.drawLine(); } public void drawCircle() { DP2.drawCircle(); } } public class BridgeClient { public static void main(String[] args) { // 画图形的实现1 Drawing draw1 = new V1Drawing(); // 画图形的实现2 Drawing draw2 = new V2Drawing(); // 画出矩形(抽象) Shape shape1 = new Rectangle(draw1); shape1.draw(); // 画出圆(抽象) Shape shape2 = new Circle(draw2); shape2.draw(); } }

    输出结果:使用DP1的draw_a_line()画线使用DP1的draw_a_line()画线使用DP1的draw_a_line()画线使用DP1的draw_a_line()画线使用DP2的drawCircle()画圆

    在这个例子中Shape对象实际上是一个RetangleCircle对象Client并不知道到底是那个因为它们看起来都一样。Drawing实际上是一个V1DrawingV2Drawing,Shape对象并知道到底是哪个因为它们看起来都一样。DP1或DP2使用它的Drawing对象知道是哪一个。Shape是事物的抽象,Drawing是实现或者操作事物方法的抽象。他们两个都可以独立地变化。正如例子中所说那样,我们可以输出一个矩形可以使用V1Drawing也可以使用V2Drawing来完成,输出一个圆形也是一样都有两种方法。Bridge模式遵循了设计模式中两条基本策略:找出变化并封装之和优先使用对象聚集,而不是类继承。

        小结:Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。


    最新回复(0)