橋接模式(Bridge)——一個把 n*m 的問題轉化爲 n+m 的問題

定義

橋接模式(Bridge),將抽象部分與它的實現部分分離,使它們都可以獨立低變化。

再理解

我們可以把禮物從兩個維度進行劃分:給人的感覺、實物
給人的感覺就是抽象的,實物就是實現部分。

假如:
禮物給人的感覺有:溫暖的禮物、冷漠的禮物、狂野的禮物。。。總過6種
禮物有:花、首飾兩種。

正常理解,一個禮物,給人一種感覺,應該是要寫在一個類的,所以:
按照正常來寫,是:6*2=12個類

但是,橋接模式,把抽象和實現分開了。給人的感覺和禮物分開了,然後進行組合。就變成了 6+2=8個類了。

案例

假如,我是開禮品店的,我的禮品有花、首飾。我給禮品分的類有:給人感覺溫暖的禮物、給人感覺冷漠的禮物。客戶來購物時,按照這兩個標準選禮物。

UML類圖

橋接模式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();
	}
}

運行結果

花
類型是溫暖的
-----
首飾
類型是溫暖的
======
花
類型是冰冷的
-----
首飾
類型是冰冷的

總結

  1. 實現了抽象和實現部分的分離,從而極大的提高了靈活性。
  2. 讓抽象部分和實現部分分離,有助於系統分層設計,從而產生更好的結構化系統
  3. 對於系統的高層部分,只需要知道抽象部分和實現部分的接口就行了,其他部分由具體業務來完成
  4. 防止類爆炸
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章