人物:大鳥,小菜
事件:大鳥玩魂斗羅手機遊戲,小菜也想玩,但因為這款手機遊戲只能適配大鳥的手機,卻不能適配小菜的手機,小菜抱怨說如果遊戲軟體能夠統一適配就好了,大鳥笑著給小菜講解了橋接模式
橋接模式:
1.闡述了設計程式時緊耦合思路演化
2.為解決緊耦合的缺陷,引出了合成/聚合復用原則
3.由合成/聚合復用原則展開了松耦合實現
1.用**設計:乙個n品牌的手機,擁有乙個小遊戲
遊戲類:
@slf4j客戶端:public
class
handsetngame
}
handsetngame game =newhandsetngame();2.設計:乙個品牌n的手機有乙個小遊戲,乙個品牌m的手機有乙個小遊戲(因為兩個品牌都有遊戲,他們都有共同的rungame介面,所以可以抽象個父類出來)game.rungame();
handsetgame類,抽象父類:
@slf4jm類手機和n類手機都繼承它:public
abstract
class
handsetgame
@slf4jpublic
class handsetmgame extends
handsetgame
}
@slf4j3.設計:m品牌手機和n品牌手機再加上都有通訊錄功能public
class handsetngame extends
handsetgame
}
小菜的結構圖:
**實現如下:
手機品牌:
public手機品牌n和手機品牌m:class
handsetbrand
}
publicclass handsetbrandn extends
handsetbrand
public手機品牌m的遊戲和通訊錄:class handsetbrandm extends
handsetbrand
@slf4jpublic
class handsetbrandmgame extends
handsetbrandm
}
@slf4j手機品牌n的遊戲和通訊錄:public
class handsetbrandmaddresslist extends
handsetbrandm
}
@slf4jpublic
class handsetbrandngame extends
handsetbrandn
}
@slf4j客戶端**:public
class handsetbrandnaddresslist extends
handsetbrandn
}
public輸出結果:class
phonecliengt
}
執行m品牌手機通訊錄大鳥:如果每個手機增加***功能執行m品牌手機遊戲
執行n品牌手機通訊錄
執行n品牌手機遊戲
小菜:再在每個手機下增加乙個子類
大鳥:如果再增加乙個手機品牌
小菜:那就再增加乙個手機品牌和三個子類,現在感覺有點麻煩了
大鳥:如果再增加乙個功能,那不是又要增加三個子類麼
小菜:那我換一種思路,如下:
小菜思考了下:還是不行,如果要增加乙個功能,還是會有很大的影響
盡可能使用合成/聚合,盡量不要使用類繼承
因為物件的繼承是在編譯時就定義好了,所以執行時無法改變從父類繼承的實現,子類和父類有非常緊密的依賴關係,當需要復用子類時,當繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他合適的類替換,這種依賴關係限制了靈活性,並最終限制了復用性。
1.合成/聚合結構圖
2.合成/聚合的好處:優先使用物件的合成/聚合將有助於你保持每個類被封裝,並集中在單個任務上。這樣的類和類繼承層次會保持較小的規模,並且不太可能增長成不可控制的龐然大物。
3.結合上述例子的**結構圖:
小菜:手機品牌包含手機軟體,但手機軟體不是手機品牌的一部分,所以是聚合關係
handsetsoft類,手機軟體:
publichandsetgame類,手機遊戲:abstract
class
handsetsoft
@slf4jhandsetaddresslist類,手機通訊錄:public
class handsetgame extends
handsetsoft
}
@slf4jhandsetbrand類,手機品牌類:public
class handsetaddresslist extends
handsetsoft
}
public品牌n,品牌m具體類:abstract
class
handsetbrand
public
abstract
void
run();
}
publicclass 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...