橋接模式屬於結構型模式。java
定義:將抽象部分與他的實現部分分離,使他們均可以獨立的變化。ide
面向對象設計中,咱們還有一個重要的設計原則,就是合成/聚合複用原則,即優先使用對象合成/聚合,而不是類繼承。這樣作的好處是有助於你保持每一個類被封裝和集中。(橋接模式符合該設計原則)
測試
聚合表示一種弱的‘擁有關係’,體現的是A對象能夠包含B對象,但B對象不是A對象的一部分。this
合成則是一種強的‘擁有關係’,體現了嚴格的部分和總體關係,部分和總體的聲明週期同樣。
spa
適用性:設計
你不但願在抽象和他的實現部分之間有一個固定的綁定關係。例如這種狀況多是由於,在程序運行時刻實現部分應能夠被選擇或者切換。指針
類的抽象以及他的實現都應該能夠經過生成子類的方法加以擴充。這時bridge模式使你能夠對不一樣的抽象接口和實現部分進行組合,並對他們進行擴充。code
對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼沒必要從新編譯。對象
有許多子類要生成,這樣一種類層次結構說明你必須將一個對象分紅兩個部分。繼承
想在多個對象間共享實現,但同時要求客戶並不知道這一點。
結構
Abstraction 定義抽象類的接口。維護一個紙箱Implementor類型對象的指針。
RefinedAbstraction 擴充由Abstraction定義的接口。
Implementor 定義實現類的接口,該接口不必定要與Abstraction的接口徹底一致。
1.下述代碼中,人和clothing就是一種聚合關係。
2.而人和男人不是一種合成關係。男人和type是一種合成關係(不太肯定,求大神解惑)。
public class QiaojiemoshiTest3 { public static void main(String[] args) { Clothing clothing=new Trouser(); Person person=new Man(); person.setClothing(clothing); person.dress(); } } abstract class Clothing{ public abstract void personDressCloth(Person person); } abstract class Person{ private Clothing clothing; private String type; public Clothing getClothing() { return clothing; } public void setClothing(Clothing clothing) { this.clothing = clothing; } public String getType() { return type; } public void setType(String type) { this.type = type; } public abstract void dress(); } class Man extends Person{ public Man(){ setType("男人"); } @Override public void dress() { Clothing clothing=getClothing(); clothing.personDressCloth(this); } } class Women extends Person{ //.... @Override public void dress() { } } class Trouser extends Clothing{ @Override public void personDressCloth(Person person) { System.out.println(person.getType()+"穿褲子"); } } class Dress extends Clothing{ @Override public void personDressCloth(Person person) { System.out.println(person.getType()+"穿裙子"); } }