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

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

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

    so true

    心懷未來(lái),開創(chuàng)未來(lái)!
    隨筆 - 160, 文章 - 0, 評(píng)論 - 40, 引用 - 0
    數(shù)據(jù)加載中……

    [轉(zhuǎn)載]設(shè)計(jì)模式學(xué)習(xí)筆記(四)—Bridge橋接模式

    《設(shè)計(jì)模式》一書對(duì)Bridge是這樣描述的:

    將抽象與其實(shí)現(xiàn)解耦,使它們都可以獨(dú)立地變化。

    大致意思是說:將一組實(shí)現(xiàn)與另一組使用他們的對(duì)象分離。這里的實(shí)現(xiàn)指的是抽象類及其

    派生類用來(lái)實(shí)現(xiàn)自己的對(duì)象(而不是抽象類的派生類,這些派生類被稱為具體類)。下面

    是《Design Patterns Explained》書中的例子。其結(jié)構(gòu)圖如下:
      

    下面是它的實(shí)現(xiàn):

    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();

        }

    }

    輸出結(jié)果如下

    使用DP1draw_a_line()畫線

    使用DP1draw_a_line()畫線

    使用DP1draw_a_line()畫線

    使用DP1draw_a_line()畫線

    使用DP2drawCircle()畫圓

    在這個(gè)例子中Shape對(duì)象實(shí)際上是一個(gè)RetangleCircle對(duì)象Client并不知道到底是那個(gè)因?yàn)樗鼈兛雌饋?lái)都一樣。Drawing實(shí)際上是一個(gè)V1DrawingV2Drawing,Shape對(duì)象并知道到底是哪個(gè)因?yàn)樗鼈兛雌饋?lái)都一樣。DP1或DP2使用它的Drawing對(duì)象知道是哪一個(gè)。Shape是事物的抽象,Drawing是實(shí)現(xiàn)或者操作事物方法的抽象。他們兩個(gè)都可以獨(dú)立地變化。正如例子中所說那樣,我們可以輸出一個(gè)矩形可以使用V1Drawing也可以使用V2Drawing來(lái)完成,輸出一個(gè)圓形也是一樣都有兩種方法。Bridge模式遵循了設(shè)計(jì)模式中兩條基本策略:找出變化并封裝之和優(yōu)先使用對(duì)象聚集,而不是類繼承。

        小結(jié):Bridge模式是一種抽象與其實(shí)現(xiàn)相分離的模式。它主要應(yīng)用于:當(dāng)事物是一組變化量,和對(duì)這些事物的操作方法(實(shí)現(xiàn))也是一組變化量的情況,也就是說它們都是多變的。

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

    主站蜘蛛池模板: 中国好声音第二季免费播放| 午夜影院免费观看| 337p日本欧洲亚洲大胆人人| 一个人免费播放在线视频看片| 中文字幕免费在线观看| 四虎影永久在线高清免费 | 成人毛片18女人毛片免费96| 少妇亚洲免费精品| 久久亚洲国产精品五月天| 亚洲sm另类一区二区三区| 免费在线观看毛片| 亚洲色大成网站www永久一区| tom影院亚洲国产一区二区| 亚洲午夜无码久久久久软件| 免费黄网站在线看| 亚洲男人的天堂一区二区| 亚洲精品第一综合99久久| 无码成A毛片免费| 亚洲最大黄色网站| 全黄大全大色全免费大片| 四虎免费久久影院| 一级视频在线免费观看| 亚洲av最新在线网址| 人人鲁免费播放视频人人香蕉| 在线观看成人免费| 亚洲国产成人超福利久久精品| 久久这里只精品国产免费10| 在线观看亚洲成人| 丰满少妇作爱视频免费观看| 亚洲成AV人片在线观看无| 国产免费MV大全视频网站| 国产精品jizz在线观看免费| 7777久久亚洲中文字幕| 大胆亚洲人体视频| 久久国产精品免费观看| 亚洲综合精品第一页| 伊人久久亚洲综合| 美女被cao免费看在线看网站| 亚洲欧洲在线播放| 国产又粗又长又硬免费视频| 华人在线精品免费观看|