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

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

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

    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 閱讀(236) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 嫩草影院在线播放www免费观看| 成人免费无码大片a毛片软件| 免费在线观看亚洲| 亚洲成AV人片在WWW| 免费无码又爽又高潮视频| 亚洲乱码在线卡一卡二卡新区| 免费精品国产自产拍在| 亚洲视频在线观看2018| 成年男女免费视频网站| 亚洲精品无码久久久久YW| 国产人妖ts在线观看免费视频| 日日摸日日碰夜夜爽亚洲| 无码欧精品亚洲日韩一区夜夜嗨| 美女视频黄a视频全免费网站色| 亚洲国产天堂久久综合| 中文字幕免费在线视频| 亚洲视频中文字幕| 噼里啪啦免费观看高清动漫4| 亚洲精品免费网站| 免费v片在线观看| 中文字幕在线视频免费观看| 亚洲国产精品自在在线观看| 国产桃色在线成免费视频| 日本亚洲欧美色视频在线播放| 亚洲人成色7777在线观看不卡| 国产又黄又爽又大的免费视频| 久久丫精品国产亚洲av| 成人性生交大片免费看午夜a| 看全免费的一级毛片| 亚洲va中文字幕无码久久| 日本三级2019在线观看免费| 美女羞羞免费视频网站| 亚洲AV日韩AV永久无码绿巨人| 9久9久女女免费精品视频在线观看| 国产亚洲精品91| 久久亚洲AV成人无码国产| 男女交性永久免费视频播放| 福利免费在线观看| 亚洲日韩中文字幕一区| 国产亚洲一区二区在线观看| 成年女人免费视频播放体验区|