ü 核心:将抽象部分与它的实现部分分离,使他们都可以独立地变化;
ü 结构图:
ü 用途:当系统的实现可以按多个角度(范畴)进行分类,而每一种分类都有可能变化时,那么就把这种多角度分离出来让他们独立变化,从而减少他们之间的耦合;
ü 实例:手机型号与手机软件的组合
Ø 手机软件抽象类 – 文件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的手机
--运行手机通讯录!