設計模式—橋接模式
阿新 • • 發佈:2017-05-18
可能 定義 優點 代碼實現 等等 復用 使用 擴展 就會
用的並不是特別多,但是熟悉這個模式對於理解面向對象的設計原則,包括“開-閉”原則以及組合/聚合復用原則都很有幫助。
理解好這兩個原則,有助於形成正確的設計思想和培養良好的設計風格。
如果子類的擴展有兩個維度,這時候想解耦和來解決排列組合問題。用組合代替繼承。
比如說就禮物這東西而言,可大致抽象分為兩類,一種是溫暖型的,一種是狂野型的,在禮物的實現上可具體為花或者鉆戒或者大炮等等;
在抽象這個維度上可能會擴展,在具體實現上也會擴展,就會形成各式各樣的排列組合:溫暖的***,狂野的***,實用的***。
如果這個時候使用繼承那麽繼承體系將會非常臃腫。
現在采用橋梁模式來實現,抽象部分和實現部分分離開,可以相互獨立的變化。從而大大提高了系統的可擴展性。
代碼實現:
1.禮物抽象類
package com.bjsxt.dp.bridge;
public class Gift {
protected GiftImpl impl;
}
在禮物抽象類中聚合了禮物的實現類,而不在使用繼承的方式。
2.禮物實現類
package com.bjsxt.dp.bridge;
public class GiftImpl {
}
3.繼承禮物抽象類的WarmGift
package com.bjsxt.dp.bridge;
public class WarmGift extends Gift{
public WarmGift(GiftImpl impl) {
this.impl = impl;
}
}
4.繼承禮物抽象類的WildGift
package com.bjsxt.dp.bridge;
public class WildGift extends Gift {
public WildGift(Ring ring) {
this.impl = impl;
}
}
5.繼承禮物實現類的Flower
package com.bjsxt.dp.bridge;
public class Flower extends GiftImpl {
}
6.繼承禮物實現類的Ring
package com.bjsxt.dp.bridge;
public class Ring extends GiftImpl {
}
橋梁模式的優點:
橋梁模式分離了抽象部分和實現部分,從而極大地提供了系統的靈活性。
讓抽象部分和實現部分獨立出來,分別定義接口,這有助於對系統進行分層,從而產生更好的結構化的系統。
設計模式—橋接模式