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

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

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

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

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

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

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

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

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

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 国产亚洲精品免费| 13小箩利洗澡无码视频网站免费| 亚洲av成人一区二区三区在线观看| 日本高清不卡中文字幕免费| 亚洲高清专区日韩精品| 无码人妻久久一区二区三区免费丨| 亚洲AV无码一区二区三区性色 | 亚洲国产精品激情在线观看| 热久久这里是精品6免费观看| 亚洲日韩国产精品无码av| 日韩免费电影在线观看| 国产成人无码区免费网站| 亚洲综合av一区二区三区| 亚洲日韩一页精品发布| 成人免费无码大片a毛片软件| 精品国产污污免费网站入口| 自拍日韩亚洲一区在线| 国产亚洲美日韩AV中文字幕无码成人| 波多野结衣在线免费观看| 一级做α爱过程免费视频| 亚洲丝袜中文字幕| 亚洲综合亚洲综合网成人| 国产成人免费爽爽爽视频 | 国产成人+综合亚洲+天堂| 一区二区三区亚洲| 亚洲区不卡顿区在线观看| 中文字幕人成无码免费视频| 日韩a级无码免费视频| 亚洲免费网站观看视频| 久久国产亚洲精品无码| 亚洲精品无码你懂的网站| 最近中文字幕无免费视频| 午夜不卡久久精品无码免费| 无遮挡a级毛片免费看| 天天爽亚洲中文字幕| 亚洲欧洲日韩不卡| 亚洲日韩精品无码专区网址| 日本不卡视频免费| 99精品全国免费观看视频| 免费国产黄网站在线观看可以下载| 人妖系列免费网站观看|