設計模式學習筆記(四)—Bridge橋接模式

          Posted on 2007-11-28 15:48 flustar 閱讀(1211) 評論(0)  編輯  收藏 所屬分類: Design Patterns

             《設計模式》一書對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();

              }

          }

          輸出結果如下

          使用DP1draw_a_line()畫線

          使用DP1draw_a_line()畫線

          使用DP1draw_a_line()畫線

          使用DP1draw_a_line()畫線

          使用DP2drawCircle()畫圓

          在這個例子中Shape對象實際上是一個RetangleCircle對象Client并不知道到底是那個因為它們看起來都一樣。Drawing實際上是一個V1DrawingV2Drawing,Shape對象并知道到底是哪個因為它們看起來都一樣。DP1或DP2使用它的Drawing對象知道是哪一個。Shape是事物的抽象,Drawing是實現或者操作事物方法的抽象。他們兩個都可以獨立地變化。正如例子中所說那樣,我們可以輸出一個矩形可以使用V1Drawing也可以使用V2Drawing來完成,輸出一個圓形也是一樣都有兩種方法。Bridge模式遵循了設計模式中兩條基本策略:找出變化并封裝之和優先使用對象聚集,而不是類繼承。

              小結:Bridge模式是一種抽象與其實現相分離的模式。它主要應用于:當事物是一組變化量,和對這些事物的操作方法(實現)也是一組變化量的情況,也就是說它們都是多變的。

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 衡阳市| 鄂托克前旗| 桦川县| 景泰县| 鹤壁市| 东至县| 临沭县| 卓资县| 黄浦区| 潮安县| 金华市| 岳普湖县| 莱阳市| 那曲县| 柳河县| 新泰市| 伽师县| 专栏| 西乌珠穆沁旗| 泸溪县| 宁武县| 西丰县| 崇礼县| 河北省| 广西| 香港| 本溪市| 兴化市| 崇明县| 安丘市| 随州市| 峨眉山市| 麦盖提县| 龙胜| 南部县| 金门县| 拜城县| 鹤壁市| 哈尔滨市| 莫力| 宝清县|