1. 程式人生 > >Java設計模式---橋接Bridge模式

Java設計模式---橋接Bridge模式

參考於 :

  大話設計模式

  馬士兵設計模式視訊

  

    

  寫在開頭: 橋接模式主要用於一件事物分成了兩個維度,進行排列組合,比如禮物,可以分成優雅的禮物(抽象),花(具體),排列組合優雅的花!

1.為什麼使用橋接模式 

  小丁追小彭,送禮物必不可少。面向物件的思維,如何去實現這個禮物,先定義一個禮物的介面或抽象類,然後只要實現了這個介面那就算一個禮物。

  小彭是一個精緻的女孩,我要送一個精緻的禮物,好,按照上面的思路,實現禮物介面。小丁進了花店,哇,花朵,嗯,花朵也算禮物,實現禮物介面。

  小丁想挑精緻的花朵,用面向物件的思想,嗯,直接繼承精緻的禮物就實現了精緻花朵。

  

  但是,小丁仔細一想,這只是花店,只有花朵,實現起來不復雜,如果進了一家百貨商店,那麼就要這樣實現,相當麻煩。

  

2.使用橋接模式

  使用前先解釋上面圖片中的話:

  將抽象部分和實現部分分離 : 上面例子中,精緻的禮物就是一個比較抽象的部分,精緻的花就是一個實現部分,上面例子中,這兩個是繼承關係,現在需要進行分離。

  使用聚合關係來替換繼承關係

  下面程式碼中Gift介面可去,去了後類的關係就和最上面那張UML一樣

  下面程式碼的UML類圖

  

 

package com.dingyu;
/**
 * 實現了這個介面,表示你是一個禮物
 * 
@author dingyu * */ public interface Gift { }
package com.dingyu;
/**
 * 一個精緻的禮物
 * 抽象部分有一個具體的部分
 * @author dingyu
 *
 */
public class GraceGift implements Gift {
    private GiftImpl giftImpl;

    public GraceGift(GiftImpl giftImpl) {
        this.giftImpl = giftImpl;
    }

    public GiftImpl getGiftImpl() {
        
return giftImpl; } public void setGiftImpl(GiftImpl giftImpl) { this.giftImpl = giftImpl; } } 
package com.dingyu;
/**
 * 具體的禮物
 * @author dingyu
 *
 */
public interface GiftImpl {

}
package com.dingyu;

public class Flower implements GiftImpl {

}
package com.dingyu;

public class Shorts implements GiftImpl {
    
}
package com.dingyu;

/**
 * 男孩類
 * 
 * @author dingyu
 *
 */
public class Boy {
    private String name = "xiaoding";

    public void sendGift() {
        Gift gift1;
        Gift gift2;
        gift1 = new GraceGift(new Shorts());
        gift2 = new GraceGift(new Flower());
    }
}