国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

橋接模式-處理多維度變化

這篇具有很好參考價值的文章主要介紹了橋接模式-處理多維度變化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?程序員小名去擺攤賣奶茶了,口味有香、甜。 型號有大、中、小。假如小名先在家里把這些奶茶裝好,那么最少要裝2x3 = 6杯奶茶,如果此時新增一個口味:酸,那么就需要多裝3杯奶茶了。而且這樣做,等客戶買走一種,比如 甜+大杯后,這種型號就沒有了,這樣擴(kuò)展性不太行哦。

換種方案:擺攤的時候只要帶兩樣?xùn)|西:1)不同口味的飲料;2)不同型號的杯子。 那么就可以不要先再家裝好,客戶想買什么,臨時裝好就行了,而且就算新增一個口味,那么也只是多準(zhǔn)備一種飲料而已,而不是要增加三種類型。

第二種方案就算本文講的橋接模式,“客戶點奶茶口味及型號,小名臨時裝”的這個動作就是“橋”,將口味與杯子型號連接起來。

1 橋接模式概述

如果軟件系統(tǒng)種某個類存在兩個或以上變化的維度,通過該模式可以將這些維度分離處理,使兩者可以獨立擴(kuò)展,讓系統(tǒng)更加符合單一職責(zé)原則。將獨立的維度設(shè)計為不同的繼承等級接口,并在抽象層建立一個抽象關(guān)聯(lián),該關(guān)聯(lián)類似一條連接這些獨立繼承結(jié)構(gòu)的橋。

橋接模式-處理多維度變化,設(shè)計模式的藝術(shù),橋接模式

圖 橋接模式結(jié)構(gòu)圖

Abstraction,抽象類,一般是抽象類而不是接口,既可包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)方法。做更多、更復(fù)雜的操作。定義了一個Implementor類型的對象并可維護(hù)該對象。

RefinedAbstraction,擴(kuò)充抽象類,實現(xiàn)了在Abstraction中聲名的抽象業(yè)務(wù)方法。可以調(diào)用在Implementor中定義的業(yè)務(wù)方法。

Implementor,實現(xiàn)類接口,接口不一定要與Abstraction的接口完全一致,僅提供基本操作。

ConcreteImplementor,具體實現(xiàn)類,實現(xiàn)Implementor基本操作接口。

public abstract class MilkTeaAbstraction {

    protected CupImplementor cupImplementor;

    public MilkTeaAbstraction(CupImplementor cupImplementor) {
        this.cupImplementor = cupImplementor;
    }

    public abstract void taste(); //口味

}

public class FragrantMilkTea extends MilkTeaAbstraction{

    public FragrantMilkTea(CupImplementor cupImplementor) {
        super(cupImplementor);
    }

    @Override
    public void taste() {
        System.out.println("香 " + cupImplementor.model() + ";");
    }
}

public class AcidMilkTea extends MilkTeaAbstraction{

    public AcidMilkTea(CupImplementor cupImplementor) {
        super(cupImplementor);
    }

    @Override
    public void taste() {
        System.out.println("酸 " + cupImplementor.model() + ";");
    }
}

public interface CupImplementor {

    String model(); //型號

}

public class BigCupImplementor implements CupImplementor{
    @Override
    public String model() {
        return "大杯";
    }
}

public class SmallCupImplement implements CupImplementor{
    @Override
    public String model() {
        return "小杯";
    }
}

public class Client {

    public static void main(String[] args) {
        CupImplementor cupImplementor = new BigCupImplementor();
        MilkTeaAbstraction milkTeaAbstraction = new FragrantMilkTea(cupImplementor);
        milkTeaAbstraction.taste();
//        運(yùn)行結(jié)果:
//        香 大杯;
    }

}

2 優(yōu)缺點

優(yōu)點:

  1. 用“對象間的關(guān)聯(lián)關(guān)系”解耦抽象和實現(xiàn)之間固有的綁定關(guān)系,使得抽象和實現(xiàn)可沿著各自的維度來變化。即抽象和實現(xiàn)不再在同一個繼承層次結(jié)構(gòu)中。
  2. 提供了系統(tǒng)的可擴(kuò)展性,在兩個維度中任意擴(kuò)展一個維度,都不需要修改原有系統(tǒng),符合開閉原則。

缺點:文章來源地址http://www.zghlxwxcb.cn/news/detail-604415.html

  1. 增加系統(tǒng)的理解和設(shè)計難度,要求開發(fā)者一開始就針對抽象層進(jìn)行設(shè)計與編程。
  2. 要求正確識別出系統(tǒng)中兩個獨立變化的維度,如果識別這兩個維度也需要一定的經(jīng)驗積累。

3 適用場景

  1. 一個類存在兩個(或多個)獨立變化的維度,且這些維度都需要獨立進(jìn)行擴(kuò)展。
  2. 不希望使用繼承或因為多層繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng)。

到了這里,關(guān)于橋接模式-處理多維度變化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包