[轉載]設計模式學習筆記(四)—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();
}
}
輸出結果如下:
使用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模式是一種抽象與其實現相分離的模式。它主要應用于:當事物是一組變化量,和對這些事物的操作方法(實現)也是一組變化量的情況,也就是說它們都是多變的。
posted on 2007-12-20 23:37 so true 閱讀(236) 評論(0) 編輯 收藏 所屬分類: Java