java设计模式---桥接模式
2013-07-18 10:50
507 查看
《设计模式》一书对Bridge是这样描述的:将抽象与其实现解耦,使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。下面是《Design Patterns Explained》书中的例子。其结构图如下:
下面是它的实现:
输出结果如下:
在这个例子中Shape对象实际上是一个Retangle或Circle对象,但Client并不知道到底是那个,因为它们看起来都一样。Drawing实际上是一个V1Drawing或V2Drawing,但Shape对象并知道到底是哪个,因为它们看起来都一样。DP1或DP2使用它的Drawing对象知道是哪一个。Shape是事物的抽象,Drawing是实现或者操作事物方法的抽象。他们两个都可以独立地变化。正如例子中所说那样,我们可以输出一个矩形可以使用V1Drawing也可以使用V2Drawing来完成,输出一个圆形也是一样都有两种方法。Bridge模式遵循了设计模式中两条基本策略:找出变化并封装之和优先使用对象聚集,而不是类继承。 小结:Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。
下面是它的实现:
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(); } }
输出结果如下:
使用DP1的draw_a_line()画线 使用DP1的draw_a_line()画线 使用DP1的draw_a_line()画线 使用DP1的draw_a_line()画线 使用DP2的drawCircle()画圆
在这个例子中Shape对象实际上是一个Retangle或Circle对象,但Client并不知道到底是那个,因为它们看起来都一样。Drawing实际上是一个V1Drawing或V2Drawing,但Shape对象并知道到底是哪个,因为它们看起来都一样。DP1或DP2使用它的Drawing对象知道是哪一个。Shape是事物的抽象,Drawing是实现或者操作事物方法的抽象。他们两个都可以独立地变化。正如例子中所说那样,我们可以输出一个矩形可以使用V1Drawing也可以使用V2Drawing来完成,输出一个圆形也是一样都有两种方法。Bridge模式遵循了设计模式中两条基本策略:找出变化并封装之和优先使用对象聚集,而不是类继承。 小结:Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。
相关文章推荐
- java设计模式(结构型)之桥接模式
- Java 设计模式之桥接模式
- 讲故事,学(Java)设计模式—桥接模式
- java设计模式--结构型模式--桥接模式
- java设计模式5.组合模式、门面模式、享元模式、桥接模式
- Java设计模式之桥接模式
- JAVA设计模式(07):结构型-桥接模式(Bridge)
- JAVA中的设计模式 - 桥接模式
- 设计模式之桥接模式(Java语言描述)
- 设计模式之桥接模式+适配器模式Java实现
- JAVA设计模式之桥接模式
- java设计模式第4弹--桥接模式
- java设计模式---Bridge Pattern---桥接模式
- java设计模式(一)——适配器、桥接、建造者、职责链、命令
- 设计模式之桥接模式(Java语言描述)
- java设计模式_桥接模式
- JAVA系列-设计模式-桥接模式
- JAVA设计模式初探之桥接模式
- java 设计模式之桥接模式Bridge
- java 设计模式--桥接