so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          [轉載]設計模式學習筆記(四)—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();

              }

          }

          輸出結果如下

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

          posted on 2007-12-20 23:37 so true 閱讀(247) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 富顺县| 衢州市| 曲水县| 阜康市| 山东| 婺源县| 象山县| 普宁市| 林西县| 辽阳市| 宜黄县| 西林县| 江源县| 乌兰浩特市| 荥经县| 武穴市| 岑溪市| 婺源县| 柘城县| 扬中市| 白沙| 武功县| 岑溪市| 安国市| 奉节县| 交口县| 弥渡县| 黎川县| 湄潭县| 福安市| 安新县| 龙口市| 柯坪县| 永泰县| 成都市| 东方市| 甘洛县| 横山县| 江川县| 乌苏市| 湘西|