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

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

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

    夢(mèng)幻之旅

    DEBUG - 天道酬勤

       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks
    橋接模式
        將抽象部份與它的實(shí)現(xiàn)部份分離,使它們都可獨(dú)立地變化。
        橋接模式是最復(fù)雜的模式之一,它把事物對(duì)象和其具體行為、具體特征分離開來(lái),使它們可以各自獨(dú)立的變化。事物對(duì)象僅是一個(gè)抽象的概念。如“圓形”、“三角形”歸于抽象的“形狀”之下,而“畫圓”、“畫三角”歸于實(shí)現(xiàn)行為的“畫圖”類之下,然后由“形狀”調(diào)用“畫圖”。
    橋接模式的組成部份:
       1.抽象對(duì)象
       2.對(duì)象實(shí)現(xiàn)
       3.細(xì)化抽象
       4.細(xì)化對(duì)象實(shí)現(xiàn)
    橋接模式各組成部份之間的關(guān)系:

    例子
    1.抽象對(duì)象
    package bridge;

    /**
     * <ul>
     * <li>Title:[Shape]</li>
     * <li>Description: [圖形接口]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-8-3]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
     * 
    @version 1.0
     
    */

    public interface Shape
    {
        
    /**
         * <ul>
         * <li>Description:[畫法]</li>
         * <li>Created by [Huyvanpull] [2011-8-3]</li>
         * <li>Midified by [modifier] [modified time]</li>
         * </ul>
         
    */

        
    public void draw();
        
        
    /**
         * <ul>
         * <li>Description:[百分比放縮]</li>
         * <li>Created by [Huyvanpull] [2011-8-3]</li>
         * <li>Midified by [modifier] [modified time]</li>
         * </ul>
         * 
         * 
    @param pct
         
    */

        
    public void resizeByPercentage(double pct);
    }


    2.抽象對(duì)象實(shí)現(xiàn)
    package bridge;

    /**
     * <ul>
     * <li>Title:[CircleShape]</li>
     * <li>Description: [圓圖形]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-8-3]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
     * 
    @version 1.0
     
    */

    public class CircleShape implements Shape
    {
        
    /** 圖形位置X */
        
    private double x;
        
        
    /** 圖形位置Y */
        
    private double y;
        
        
    /** 圖形單徑 */
        
    private double radius;
        
        
    /** 畫接口 */
        
    private DrawAPI drawAPI;
        
        
    /**
         * <ul>
         * <li>Description:[構(gòu)造方法]</li>
         * <ul>
         * 
         * 
    @param x
         * 
    @param y
         * 
    @param radius
         * 
    @param drawAPI
         
    */

        
    public CircleShape(double x, double y, double radius, DrawAPI drawAPI)
        
    {
            
    this.x = x;
            
    this.y = y;
            
    this.radius = radius;
            
    this.drawAPI = drawAPI;
        }

        
        
    /**
         * <ul>
         * <li>Description:[畫圖]</li>
         * <li>Created by [Huyvanpull] [2011-8-3]</li>
         * <li>Midified by [modifier] [modified time]</li>
         * </ul>
         
    */

        
    public void draw()
        
    {
            drawAPI.drawCircle(x, y, radius);
        }

        
        
    /**
         * <ul>
         * <li>Description:[百分比放縮]</li>
         * <li>Created by [Huyvanpull] [2011-8-3]</li>
         * <li>Midified by [modifier] [modified time]</li>
         * </ul>
         * 
         * 
    @param pct
         
    */

        
    public void resizeByPercentage(double pct)
        
    {
            radius 
    *= pct;
        }

    }


    3.細(xì)化抽象
    package bridge;

    /**
     * <ul>
     * <li>Title:[DrawAPI]</li>
     * <li>Description: [畫圖API]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-8-3]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public interface DrawAPI
    {   
        
    /**
         * <ul>
         * <li>Description:[畫圓]</li>
         * <li>Created by [Huyvanpull] [2011-8-3]</li>
         * <li>Midified by [modifier] [modified time]</li>
         * </ul>
         * 
    @param x
         * 
    @param y
         * 
    @param radius
         
    */

        
    public void drawCircle(double x, double y, double radius);
    }


    4.細(xì)化抽象實(shí)例
    1).
    package bridge;

    /**
     * <ul>
     * <li>Title:[ConcretDrawA]</li>
     * <li>Description: [具體畫法]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-8-3]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class ConcretDrawA implements DrawAPI
    {
        
    /* (non-Javadoc)
         * @see bridge.DrawAPI#drawCircle(double, double, double)
         
    */

        
    public void drawCircle(double x, double y, double radius)
        
    {
            System.out.printf(
    "API1.circle at %f:%f radius %f\n", x, y, radius);
        }
       
    }


    2).
    package bridge;

    /**
     * <ul>
     * <li>Title:[ConcretDrawB]</li>
     * <li>Description: [具體畫法2]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-8-3]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class ConcretDrawB implements DrawAPI
    {   
        
    /* (non-Javadoc)
         * @see bridge.DrawAPI#drawCircle(double, double, double)
         
    */

        
    public void drawCircle(double x, double y, double radius)
        
    {
            System.out.printf(
    "API2.circle at %f:%f radius %f\n", x, y, radius);
        }
       
    }


    5.測(cè)試
    package bridge;

    public class Test
    {   
        
    public static void main(String[] args)
        
    {
            Shape[] shapes 
    = new Shape[2];
            shapes[
    0= new CircleShape(123new ConcretDrawA());
            shapes[
    1= new CircleShape(5711new ConcretDrawB());
      
            
    for (Shape shape : shapes)
            
    {
                shape.resizeByPercentage(
    2.5);
                shape.draw();
            }

        }

    }

    效果:

    1.Bridge模式使用“對(duì)象間的組合關(guān)系”解耦了抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系,使得抽象和實(shí)現(xiàn)可以沿著各自的維度來(lái)變化。

    2.所謂抽象和實(shí)現(xiàn)沿著各自維度的變化,即“子類化”它們,得到各個(gè)子類之后,便可以任意它們,從而獲得不同平臺(tái)上的不同型號(hào)。

    3.Bridge模式有時(shí)候類似于多繼承方案,但是多繼承方案往往違背了類的單一職責(zé)原則(即一個(gè)類只有一個(gè)變化的原因),復(fù)用性比較差。Bridge模式是比多繼承方案更好的解決方法。

    4.Bridge模式的應(yīng)用一般在“兩個(gè)非常強(qiáng)的變化維度”,有時(shí)候即使有兩個(gè)變化的維度,但是某個(gè)方向的變化維度并不劇烈——換言之兩個(gè)變化不會(huì)導(dǎo)致縱橫交錯(cuò)的結(jié)果,并不一定要使用Bridge模式。


    適用性:

    1.如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的聯(lián)系。

    2.設(shè)計(jì)要求實(shí)現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者說(shuō)實(shí)現(xiàn)化角色的改變對(duì)客戶端是完全透明的。

    3.一個(gè)構(gòu)件有多于一個(gè)的抽象化角色和實(shí)現(xiàn)化角色,系統(tǒng)需要它們之間進(jìn)行動(dòng)態(tài)耦合。

    4.雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨(dú)立變化,設(shè)計(jì)要求需要獨(dú)立管理這兩者。


    總結(jié)
    Bridge模式是一個(gè)非常有用的模式,也非常復(fù)雜,它很好的符合了開放-封閉原則和優(yōu)先使用對(duì)象,而不是繼承這兩個(gè)面向?qū)ο笤瓌t。
    posted on 2011-08-03 15:26 HUIKK 閱讀(282) 評(píng)論(0)  編輯  收藏 所屬分類: Design Patterns
    主站蜘蛛池模板: 亚洲精品在线播放视频| 免费一级国产生活片| 久久精品乱子伦免费| 大妹子影视剧在线观看全集免费| 五月婷婷免费视频| 五月天婷婷免费视频| 有码人妻在线免费看片| 丰满少妇作爱视频免费观看| 国产美女视频免费观看的网站 | 亚洲综合精品一二三区在线| 国产亚洲美女精品久久久久狼| 久久亚洲综合色一区二区三区| 久久亚洲精品视频| 亚洲精品国产肉丝袜久久| 亚洲国产av美女网站| 亚洲依依成人亚洲社区| 激情小说亚洲图片| 国产黄在线播放免费观看| 任你躁在线精品免费| 91精品手机国产免费| 国产又大又粗又长免费视频| 成年女人看片免费视频播放器| 国产大片51精品免费观看| 亚洲精品视频在线看| 亚洲大尺度无码无码专区| 亚洲视频在线观看免费| 最新国产成人亚洲精品影院| 亚洲国产精品无码久久98| 一级做a爰片久久毛片免费陪| 你懂的网址免费国产| xxxx日本免费| 国产中文字幕免费观看| 国产精品亚洲αv天堂无码 | 在线免费观看毛片网站| 亚洲国产精品专区在线观看| 国产AV无码专区亚洲AV男同| 91亚洲精品麻豆| 香蕉视频在线观看免费| 久久成人免费播放网站| 国产美女在线精品免费观看| 亚洲AⅤ永久无码精品AA|