<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    主站蜘蛛池模板: 啊v在线免费观看| 最近高清中文字幕无吗免费看| 日韩在线天堂免费观看| 亚洲精品第一国产综合野| 97在线视频免费| 亚洲高清资源在线观看| 麻豆高清免费国产一区| 亚洲欧洲国产综合| 日本阿v免费费视频完整版| 亚洲精品欧洲精品| 两性刺激生活片免费视频| 亚洲国产成人久久精品app| 免费毛片a在线观看67194 | 精品无码国产污污污免费| 亚洲性色精品一区二区在线| 免费观看AV片在线播放| 亚洲色偷精品一区二区三区| 免费一级毛片在级播放| 国产精品玖玖美女张开腿让男人桶爽免费看 | 成人毛片18女人毛片免费96| 日本亚洲精品色婷婷在线影院| 成年女人午夜毛片免费看 | 国产亚洲午夜精品| 亚洲国产一区视频| 亚洲电影免费在线观看| 亚洲中文字幕AV在天堂| 亚洲成AⅤ人影院在线观看| 国产成人一区二区三区视频免费| 亚洲宅男天堂a在线| 午夜一区二区免费视频| 欧洲亚洲国产精华液| 久久国产免费福利永久| 亚洲婷婷第一狠人综合精品| 成熟女人牲交片免费观看视频| 亚洲人成网站999久久久综合| 日韩免费视频在线观看| 成人在线免费视频| 久久亚洲国产欧洲精品一| 本免费AV无码专区一区| 久久久久久亚洲精品| 1000部羞羞禁止免费观看视频 |