橋接模式(重要):
又稱爲接口模式,將抽象化與實現化分離,使它們可以獨立地變化。如果系統中存在兩個獨立變化的維度(原因),那麼可以使用關聯關係將它們解耦,使它們可以獨立地擴展,用關聯關係代替多層繼承,減少了系統中類的個數,使系統更加靈活,並易於擴展
橋接模式包含的角色:抽象類,抽象類的子類,實現類接口,具體實現類
橋接模式的適用場景:
1.系統中存在兩個獨立變化的維度,且都需要獨立地擴展
2.不希望使用繼承而導致系統中類的個數過多
橋接模式的優點:
1.對於系統中兩個對立變化的維度,使用關聯關係代替多層繼承將兩個獨立變化的維度解耦,使它們可以獨立地擴展,減少了系統中類的個數,使系統更加靈活,並易於擴展,符合開閉原則,合成複用原則,里氏代換原則和依賴倒轉原則
2.使用關聯,對用戶隱藏了實現細節
橋接模式的缺點:
1.增加了系統的理解和設計難度
2.需要正確地識別出系統中獨立變化的維度
橋接模式的例子(在不同的平臺上運行不同的應用程序)
實現類接口
public interface RuntimePlatform {
void runApplication(String app);
}
實現類
public class Windows implements RuntimePlatform{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月9日
* @param app
* @throws
* @return
* @see structual.BridgePattern.RuntimePlatform#runApplication(java.lang.String)
*/
@Override
public void runApplication(String app) {
System.out.println("在windows下運行"+app.toString());
}
}
public class Linux implements RuntimePlatform{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月9日
* @param app
* @throws
* @return
* @see structual.BridgePattern.RuntimePlatform#runApplication(java.lang.String)
*/
@Override
public void runApplication(String app) {
System.out.println("在Linux下運行"+app.toString());
}
}
抽象類
public abstract class JApplication {
protected RuntimePlatform runtimePlatform;
public void setRuntimePlatform(RuntimePlatform runtimePlatform) {
this.runtimePlatform = runtimePlatform;
}
public abstract void run();
}
抽象類的子類
public class AppA extends JApplication{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月10日
* @throws
* @return
* @see structual.BridgePattern.JApplication#run()
*/
@Override
public void run() {
runtimePlatform.runApplication("AppA");
}
}
public class AppB extends JApplication{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月10日
* @throws
* @return
* @see structual.BridgePattern.JApplication#run()
*/
@Override
public void run() {
runtimePlatform.runApplication("AppB");
}
}
橋接模式的應用:
1.java虛擬機的設計,對於一個應用程序,在不同的平臺使用不同的java虛擬機 1.跨平臺日誌