大話設計模式讀書筆記 橋接模式

2022-05-07 07:42:11 字數 3509 閱讀 9164

人物:大鳥,小菜

事件:大鳥玩魂斗羅手機遊戲,小菜也想玩,但因為這款手機遊戲只能適配大鳥的手機,卻不能適配小菜的手機,小菜抱怨說如果遊戲軟體能夠統一適配就好了,大鳥笑著給小菜講解了橋接模式

橋接模式:

1.闡述了設計程式時緊耦合思路演化

2.為解決緊耦合的缺陷,引出了合成/聚合復用原則

3.由合成/聚合復用原則展開了松耦合實現

1.用**設計:乙個n品牌的手機,擁有乙個小遊戲

遊戲類:

@slf4j

public

class

handsetngame

}

客戶端:

handsetngame game =newhandsetngame();

game.rungame();

2.設計:乙個品牌n的手機有乙個小遊戲,乙個品牌m的手機有乙個小遊戲(因為兩個品牌都有遊戲,他們都有共同的rungame介面,所以可以抽象個父類出來)

handsetgame類,抽象父類:

@slf4j

public

abstract

class

handsetgame

m類手機和n類手機都繼承它:

@slf4j

public

class handsetmgame extends

handsetgame

}

@slf4j

public

class handsetngame extends

handsetgame

}

3.設計:m品牌手機和n品牌手機再加上都有通訊錄功能

小菜的結構圖:

**實現如下:

手機品牌:

public

class

handsetbrand

}

手機品牌n和手機品牌m:

public

class handsetbrandn extends

handsetbrand

public

class handsetbrandm extends

handsetbrand

手機品牌m的遊戲和通訊錄:

@slf4j

public

class handsetbrandmgame extends

handsetbrandm

}

@slf4j

public

class handsetbrandmaddresslist extends

handsetbrandm

}

手機品牌n的遊戲和通訊錄:

@slf4j

public

class handsetbrandngame extends

handsetbrandn

}

@slf4j

public

class handsetbrandnaddresslist extends

handsetbrandn

}

客戶端**:

public

class

phonecliengt

}

輸出結果:

執行m品牌手機通訊錄

執行m品牌手機遊戲

執行n品牌手機通訊錄

執行n品牌手機遊戲

大鳥:如果每個手機增加***功能

小菜:再在每個手機下增加乙個子類

大鳥:如果再增加乙個手機品牌

小菜:那就再增加乙個手機品牌和三個子類,現在感覺有點麻煩了

大鳥:如果再增加乙個功能,那不是又要增加三個子類麼

小菜:那我換一種思路,如下:

小菜思考了下:還是不行,如果要增加乙個功能,還是會有很大的影響

盡可能使用合成/聚合,盡量不要使用類繼承

因為物件的繼承是在編譯時就定義好了,所以執行時無法改變從父類繼承的實現,子類和父類有非常緊密的依賴關係,當需要復用子類時,當繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他合適的類替換,這種依賴關係限制了靈活性,並最終限制了復用性。

1.合成/聚合結構圖

2.合成/聚合的好處:優先使用物件的合成/聚合將有助於你保持每個類被封裝,並集中在單個任務上。這樣的類和類繼承層次會保持較小的規模,並且不太可能增長成不可控制的龐然大物。

3.結合上述例子的**結構圖:

小菜:手機品牌包含手機軟體,但手機軟體不是手機品牌的一部分,所以是聚合關係

handsetsoft類,手機軟體:

public

abstract

class

handsetsoft

handsetgame類,手機遊戲:

@slf4j

public

class handsetgame extends

handsetsoft

}

handsetaddresslist類,手機通訊錄:

@slf4j

public

class handsetaddresslist extends

handsetsoft

}

handsetbrand類,手機品牌類:

public

abstract

class

handsetbrand

public

abstract

void

run();

}

品牌n,品牌m具體類:

public

class handsetbrandn extends

handsetbrand

}

public

class handsetbrandm extends

handsetbrand

}

客戶端呼叫:

public

class

phoneclient

}

大鳥:這樣如果增加***功能,就增加乙個類就行,如果增加手機品牌,也只是增加乙個類就行,不會影響其他類,這個模式其實叫做橋接模式。橋接模式也就是將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

大話設計模式讀書筆記 17 橋接模式

橋接模式定義 將抽象部分與它的實現部分分離,使它們都可以獨立的變化系統有多角度分類,每一種分類都有可能變化,那麼就把這種多角度分離出來,讓它們獨立變化,每種變化不會影響其它實現 每個維度提取出抽象和它的實現,即 子類化 它們,得到各個子類之後,便可以任意它們變化 比如 乙個手機是由硬體和軟體組成,手...

《大話設計模式》讀書筆記 第22章 橋接模式

1 合成 聚合復用原則 carp 盡量使用合成 聚合,盡量不要使用類繼承。2 合成 聚合復用原則的好處 優先使用物件的合成 聚合將有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。3 橋接模式 bridge 將抽象部分與它的實現部...

大話設計模式 橋接模式

一 合成 聚合復用原則 盡量使用合成 聚合而不是繼承。二 橋接模式 將抽象部分與它的實現部分分離,使它們都可以獨立的變化。實現指的是抽象類和它的派生類用來實現自己的物件。三 示例 public abstract class handsetsoft public class handsetgame e...