JAVA開發的23種設計模式之 --- 橋接模式
橋接模式
概述:將抽象部分與他的實現部分分離,這樣抽象化與實現化解耦,使他們可以獨立的變化.如何實現解耦的呢,就是通過提供抽象化和實現化之間的橋接結構.
應用場景
實現系統可能有多個角度分類,每一種角度都可能變化.
解釋:橋接模式將繼承模式轉化成關聯關係,他降低了類與類之間的耦合度,減少了系統中類的數量,也減少了程式碼量.
理解抽象化,實現化,解耦
抽象化:將複雜物體的一個或幾個共同的特性抽出去而只注意其他特性的行動或過程.在java面向物件中抽象化就是將物件的共同性質抽取出去形成類的過程.
實現化:針對抽象化給出的具體實現,它和抽象化是一個互逆的過程,實現化是對抽象化事物的進一步具體化.
解耦:解耦是將抽象化和實現化之間的耦合關係解脫開,或者說是將他們之間的強關聯改換成弱關聯.將兩個角色之間的繼承關係修改為關聯關係.
優點
分離抽象介面及其實現部分.提高了比繼承更好的解決方案.
橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴充套件一個維度,都不需要修改原來的系統.
實現細節對客戶不透明,可以隱藏實現細節.
缺點
橋接模式的引入會增加系統的理解和設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行程式設計.
程式碼實現
示例:在開發中可能不止使用一種資料庫, 例如Mysql,SqlServer資料庫等,現在使用橋接模式建立一個連線資料庫的驅動,然後對每一個數據庫提供各自的實現.對於使用某一個數據庫的時候只需要切換一下就行.
類圖
資料庫介面
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public interface Driver {
public void connect();
}
Mysql資料庫實現類
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public class MysqlDriver implements Driver {
@Override
public void connect() {
System.out.println("連線Mysql資料庫");
}
}
SqlServer資料庫實現類
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public class SqlServerDriver implements Driver {
@Override
public void connect() {
System.out.println("連線SQLServer資料庫");
}
}
橋樑類(抽象類)
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public abstract class Bridge {
private Driver driver;
public void connect(){
driver.connect();
}
public void setDriver(Driver driverTemp){
this.driver = driverTemp;
}
public Driver getDriver(){
return this.driver;
}
}
橋樑類(實現類)
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public class MyBridge extends Bridge {
}
測試類
package Bridge;
/**
* Created by looper on 2017/8/16.
*/
public class BridgeTest {
public static void main(String[] args) {
Bridge mysqlBridge = new MyBridge();
Driver mysqlDriver = new MysqlDriver();
mysqlBridge.setDriver(mysqlDriver);
mysqlBridge.connect();
Driver sqlServerDriver = new SqlServerDriver();
mysqlBridge.setDriver(sqlServerDriver);
mysqlBridge.connect();
}
}
輸出:
我將23種設計模式的全部程式碼上傳到CSDN,有用得到的同學 可以去下載.
下載地址 : 點我
---------------------
作者:葉孤心丶
來源:CSDN
原文:https://blog.csdn.net/yeguxin/article/details/77337838
版權宣告:本文為博主原創文章,轉載請附上博文連結!