ü 核心:將抽象部分與它的實現部分分離,使他們都可以獨立地變化;
ü 結構圖:
ü 用途:當系統的實現可以按多個角度(範疇)進行分類,而每一種分類都有可能變化時,那麼就把這種多角度分離出來讓他們獨立變化,從而減少他們之間的耦合;
ü 實例:手機型號與手機軟件的組合
Ø 手機軟件抽象類 – 文件HandSetSoft.java
package com.yilong.bridge.handset.software;
public abstract class HandSetSoft {
public abstract void run();
}
Ø 手機遊戲類 – 文件HandSetGame.java
package com.yilong.bridge.handset.software;
public class HandSetGame extends HandSetSoft {
@Override
public void run() {
System.out.println("運行手機遊戲!");
}
}
Ø 手機通訊錄類 – 文件HandSetConnection.java
package com.yilong.bridge.handset.software;
public class HandSetConnection extends HandSetSoft {
@Override
public void run() {
System.out.println("運行手機通訊錄!");
}
}
Ø 手機型號抽象類 – 文件HandSetBrand.java
package com.yilong.bridge.handset.brand;
import com.yilong.bridge.handset.software.HandSetSoft;
public abstract class HandSetBrand {
private HandSetSoft handSetSoft;
public HandSetBrand(HandSetSoft handSetSoft) {
this.handSetSoft = handSetSoft;
}
public abstract void run();
public HandSetSoft getHandSetSoft() {
return handSetSoft;
}
public void setHandSetSoft(HandSetSoft handSetSoft) {
this.handSetSoft = handSetSoft;
}
}
Ø 手機型號M類 – 文件HandSetBrandM.java
package com.yilong.bridge.handset.brand;
import com.yilong.bridge.handset.software.HandSetSoft;
public class HandSetBrandM extends HandSetBrand {
public HandSetBrandM(HandSetSoft handSetSoft) {
super(handSetSoft);
}
@Override
public void run() {
System.out.println("運行品牌爲M的手機!");
if(this.getHandSetSoft() != null) {
System.out.print("--");
this.getHandSetSoft().run();
}
}
}
Ø 手機型號N類 – HandSetBrandN.java
package com.yilong.bridge.handset.brand;
import com.yilong.bridge.handset.software.HandSetSoft;
public class HandSetBrandN extends HandSetBrand {
public HandSetBrandN(HandSetSoft handSetSoft) {
super(handSetSoft);
}
@Override
public void run() {
System.out.println("運行品牌爲N的手機");
if(this.getHandSetSoft() != null) {
System.out.print("--");
this.getHandSetSoft().run();
}
}
}
Ø 測試類 – 文件Main.java
package com.yilong.bridge.handset.test;
import com.yilong.bridge.handset.brand.HandSetBrandM;
import com.yilong.bridge.handset.brand.HandSetBrandN;
import com.yilong.bridge.handset.software.HandSetConnection;
import com.yilong.bridge.handset.software.HandSetGame;
public class Main {
public static void main(String[] args) {
System.out.println("-------------------------");
HandSetBrandM handSetM = new HandSetBrandM(new HandSetGame());
handSetM.run();
handSetM.setHandSetSoft(new HandSetConnection());
handSetM.run();
System.out.println("-------------------------");
HandSetBrandN handSetN = new HandSetBrandN(new HandSetGame());
handSetN.run();
handSetN.setHandSetSoft(new HandSetConnection());
handSetN.run();
}
}
Ø 打印結果:
-------------------------
運行品牌爲M的手機!
--運行手機遊戲!
運行品牌爲M的手機!
--運行手機通訊錄!
-------------------------
運行品牌爲N的手機
--運行手機遊戲!
運行品牌爲N的手機
--運行手機通訊錄!