隨筆-348  評論-598  文章-0  trackbacks-0

          橋接模式,引用“四人幫的話”就是 “decouple an abstraction from its implementation so that the two can vary independently”,抽象與行為分離。

          說個例子

          客戶想畫圖,畫兩種圓和矩形,每種矩形都要調用特別的劃線(draw_a_line())方法,每一種圓也是。如果像上面那樣,是不是感覺混亂了點?看看下面的呢。

          這個是不是舒服點?的確,圖形和畫法都存在一一對應的關系,我們完全可以把圖形這個抽象和畫法這個行為分離,而不需要一個畫法對應多個抽象,如上面那個。

          public abstract class Shape
          {
              
          public abstract void draw();
          }


          //畫點和圓的方法
          public abstract class ShapeDrawing
          {
              
          public abstract void draw_a_line();
              
          public abstract void draw_a_circle();
          }


          public class ShapeDrawingSingleton
          {
              
          private static ShapeDrawing shapedrawingSingleton;
              
              
          public ShapeDrawingSingleton(ShapeDrawing shapedrawing)
              
          {
                  shapedrawingSingleton
          =shapedrawing;
              }

              
              
          public static ShapeDrawing getShapeDrawing()
              
          {
                  
          return shapedrawingSingleton;
              }

          }


          //畫圖方法基類
          public class VShape extends Shape
          {
              
          public ShapeDrawing shapedrawing;
              
              
          public void setShapeDrawing()
              
          {
                  
          this.shapedrawing=ShapeDrawingSingleton.getShapeDrawing();
              }

              
              
          public ShapeDrawing getShapeDrawing()
              
          {
                  
          return this.shapedrawing;
              }

          }


          public class V1Circle extends VShape
          {
              
          public Circle(){setShapeDrawing();}
              
              
          public void draw()
              
          {
                  
          //用shapedrawing畫圓
                  
          //shapedrawing.draw_a_circle()
              }

          }


          //
          //V1Rectangle和V2系列參照上面的
          //

          public class DP1ShapeDrawing extends ShapeDrawing
          {
              
          public void draw_a_line(){};
              
          public void draw_a_circle(){};
          }


          public class DP2ShapeDrawing extends ShapeDrawing
          {
              
          public void draw_a_line(){};
              
          public void draw_a_circle(){};
          }


          ShapeDrawingSingleton shapedrawingSingleton
          =new ShapeDrawingSingleton(new DP1ShapeDrawing());

          V1Circle v1circle
          =new V1Circle();
          v1circle.draw();

          //其他的類似于上面的




          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-04-08 14:27 TiGERTiAN 閱讀(1181) 評論(2)  編輯  收藏 所屬分類: Design Patterns

          評論:
          # re: Bridge Pattern[未登錄] 2007-04-08 16:19 | yy
          圖片看不到啊  回復  更多評論
            
          # re: Bridge Pattern 2007-04-08 19:53 | TiGERTiAN
          對不起,可以了!嘿嘿  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 马尔康县| 新竹县| 堆龙德庆县| 石林| 嘉善县| 呼图壁县| 临潭县| 常熟市| 湘西| 兰溪市| 宜都市| 县级市| 阿城市| 广水市| 武功县| 温宿县| 宁安市| 莱州市| 隆回县| 平原县| 锦屏县| 增城市| 上犹县| 长丰县| 长海县| 贡觉县| 永泰县| 车险| 丰顺县| 桐乡市| 南郑县| 金乡县| 博客| 彭泽县| 金沙县| 临城县| 新郑市| 巩义市| 化州市| 南宁市| 台中县|