定義
橋接模式(Bridge),將抽象部分與它的實現部分分離,使它們都可以獨立低變化。
再理解
我們可以把禮物從兩個維度進行劃分:給人的感覺、實物
給人的感覺就是抽象的,實物就是實現部分。
假如:
禮物給人的感覺有:溫暖的禮物、冷漠的禮物、狂野的禮物。。。總過6種
禮物有:花、首飾兩種。
正常理解,一個禮物,給人一種感覺,應該是要寫在一個類的,所以:
按照正常來寫,是:6*2=12個類
但是,橋接模式,把抽象和實現分開了。給人的感覺和禮物分開了,然後進行組合。就變成了 6+2=8個類了。
案例
假如,我是開禮品店的,我的禮品有花、首飾。我給禮品分的類有:給人感覺溫暖的禮物、給人感覺冷漠的禮物。客戶來購物時,按照這兩個標準選禮物。
UML類圖
代碼
實現部分包括:IGift、Flower、Jewelry
IGift——禮物接口
package 橋接模式;
public interface IGift {
void type();
}
Flower——禮物實現類1
package 橋接模式;
public class Flower implements IGift {
@Override
public void type() {
System.out.println("花");
}
}
Jewelry——禮物實現類1
package 橋接模式;
public class Jewelry implements IGift {
@Override
public void type() {
System.out.println("首飾");
}
}
抽象部分包括:父類Gift、WarmGift、ColdGift
Gift——禮物抽象父類
package 橋接模式;
public abstract class Gift {
private IGift iGift;
public Gift(IGift iGift) {
super();
this.iGift = iGift;
}
public void type() {
iGift.type();
}
}
WarmGift——禮物給人感覺類1
package 橋接模式;
public class WarmGift extends Gift{
public WarmGift(IGift iGift) {
super(iGift);
}
@Override
public void type() {
super.type();
System.out.println("類型是溫暖的");
}
}
ColdGift——禮物給人感覺類2
package 橋接模式;
public class ColdGift extends Gift{
public ColdGift(IGift iGift) {
super(iGift);
}
@Override
public void type() {
super.type();
System.out.println("類型是冰冷的");
}
}
Client——客戶
package 橋接模式;
public class Client {
public static void main(String[] args) {
Gift gift= new WarmGift(new Flower());
gift.type();
System.out.println("-----");
Gift gift2= new WarmGift(new Jewelry());
gift2.type();
System.out.println("======");
Gift gift3= new ColdGift(new Flower());
gift3.type();
System.out.println("-----");
Gift gift4= new ColdGift(new Jewelry());
gift4.type();
}
}
運行結果
花
類型是溫暖的
-----
首飾
類型是溫暖的
======
花
類型是冰冷的
-----
首飾
類型是冰冷的
總結
- 實現了抽象和實現部分的分離,從而極大的提高了靈活性。
- 讓抽象部分和實現部分分離,有助於系統分層設計,從而產生更好的結構化系統
- 對於系統的高層部分,只需要知道抽象部分和實現部分的接口就行了,其他部分由具體業務來完成
- 防止類爆炸