Bridge 橋接模式

參考:https://www.cnblogs.com/zyrblog/p/9233189.htmlhtml

https://blog.csdn.net/yuxxz/article/details/92023480this

模式簡介:

將抽象部分與它的實現部分分離,使他們均可以獨立地變化。「將抽象部分與它的實現部分分離」指實現系統可能有多個角度分類,每一種分類均可能變化,那麼就把這種多角度分離出來讓它們獨立變化,減小它們之間的耦合spa

舉個例子:我給我喜歡的男孩子送禮物,從抽象的角度來講,能夠將禮物分爲舒適類型的、狂野類型的;從具體的禮物來講,好比送玫瑰,皮帶,錢包(舒適的)、敵敵畏,殺豬刀(狂野的),.net

咱們能夠利用繼承來實現:
image
這樣是能夠實現,可是逼格過低,耦合度高,而且若是咱們須要再加一類禮物呢,擴展一直新類型的禮物,都會有多個子類須要實現code

模式結構:

image

1.Gift:定義抽象類的接口;維護一個指向GiftImpl類型對象的引用
2.WarmGift、ColdGift:擴充由Gift定義的接口
3.GiftImpl:定義實現類的接口,該接口不必定要與Gift的接口徹底一致;GiftImpl僅提供基本操做,Gift則着重定義基於這些基本操做的較高層次的操做
4.Flower:實現GiftImpl接口並定義它的具體實現htm

使用場景:

橋接模式要解決的問題:
將抽象部分與它的實現部分分離,使他們均可以獨立地變化。「將抽象部分與它的實現部分分離」指實現系統可能有多個角度分類,每一種分類均可能變化,那麼就把這種多角度分離出來讓它們獨立變化,減小它們之間的耦合對象

模式實例:

一、Gift 抽象禮物

package com.mashibing.Bridge.v4;
public abstract class Gift {
    GiftImpl impl;
}

二、WarmGift、WildGift

從禮物的類型來分類,舒適的,狂野的,漂亮的,醜陋的等等,從禮物的類型角度抽象出來,減小與具體的禮物的耦合blog

package com.mashibing.Bridge.v4;
public class WarmGift extends Gift {
    public WarmGift(GiftImpl impl) {
        this.impl = impl;
 }
}
package com.mashibing.Bridge.v4;
public class WildGift extends Gift {
    public WildGift(GiftImpl impl) {
        this.impl = impl;
 }
}

三、GiftImpl

具體禮物的抽象類,這個能夠是普通類,抽象類或者接口,根據實際須要,本類的目的是提供對具體禮物的基本操做,好比打印本身的名稱等等繼承

public class GiftImpl {
}

四、Flower,Book 具體的禮物

package com.mashibing.Bridge.v4;
public class Flower extends GiftImpl {
}
package com.mashibing.Bridge.v4;
public class Book extends GiftImpl {
}

五、Main

package com.mashibing.Bridge.v4;
public class Main {
    public static void main(String[] args) {
        Gift g = new WarmGift(new Flower());
        give(new Boy("李易峯"),g);
 }
    public static void give(Boy boy,Gift g) {
        System.out.println(g + " gived!");
 }
}
相關文章
相關標籤/搜索