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

    主站蜘蛛池模板: 伊人久久精品亚洲午夜| 人妻仑刮八A级毛片免费看| 亚洲日韩精品无码一区二区三区| 久久久久国色AV免费看图片| 久久午夜羞羞影院免费观看| 一级毛片大全免费播放| 亚洲欧美不卡高清在线| va天堂va亚洲va影视中文字幕| 久久亚洲国产成人亚| 久久亚洲色一区二区三区| 国产成人3p视频免费观看| 一区二区无码免费视频网站| 8x8×在线永久免费视频| 成人性生交大片免费看中文| 无码日韩人妻AV一区免费l| 精品无码专区亚洲| 亚洲色大18成人网站WWW在线播放 亚洲色大成WWW亚洲女子 | 成年人在线免费看视频| 亚欧色视频在线观看免费| 99精品视频在线观看免费播放| 三级黄色片免费看| 中文字幕无码免费久久9一区9| 另类小说亚洲色图| 狠狠入ady亚洲精品| 亚洲AV网一区二区三区 | 久久久久国产精品免费免费搜索| 99久久精品国产免费| 一级毛片免费视频| 91成人在线免费视频| 久久成人国产精品免费软件| 久久综合给合久久国产免费 | 亚洲av无码一区二区乱子伦as| 亚洲精品制服丝袜四区| 国产亚洲精品国产| 亚洲AV无码一区东京热| 亚洲成熟xxxxx电影| 亚洲精品在线免费观看| 亚洲不卡中文字幕| 亚洲精品无码永久在线观看男男| 亚洲人成自拍网站在线观看| 激情小说亚洲图片|