欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java結構型模式之橋接模式詳解

 更新時間:2023年02月17日 10:25:00   作者:非凡的小笨魚  
橋接模式是一種很實用的結構型模式,如果系統(tǒng)中某個類存在兩個獨立變化的維度,通過橋接模式將這兩個維度分離出來,使兩者可以獨立擴展

一.介紹

橋接模式(Bridge Pattern)屬于結構型模式。用于將抽象與其實現(xiàn)解耦,使得二者可以獨立變化。橋接模式使用組合/聚合替代繼承,從而連接功能層面與實現(xiàn)層面,把強關聯(lián)轉為弱關聯(lián)之后進行雙向擴展

適配器模式可以在抽象層不變的情況下,對實現(xiàn)進行擴展和變化;而橋接模式可以在抽象和實現(xiàn)兩個維度獨立擴展和變化

二.場景理解

JPA是ORM框架的抽象,或者說是Java提供的持久化標準,而Hibernate與TopLink則是ORM框架的具體實現(xiàn),而在Hibernate框架下,又有針對一系列數(shù)據(jù)庫廠商的具體實現(xiàn),圖中是以繼承的方式表現(xiàn)Hibernate、TopLink框架下不同數(shù)據(jù)庫廠商的行為變化

上圖我們將ORM框架數(shù)記為N,將數(shù)據(jù)庫廠商數(shù)記為M,如果要新增一個ORM框架,就會生成M個子類,如果新增了一個數(shù)據(jù)庫廠商,就要新增N個子類,兩個維度不能夠獨立的進行擴展,而且最終子類的個數(shù)是N*M,代碼復雜度會指數(shù)型增長,可能會造成類爆炸

JDBC是Java提供的訪問關系型數(shù)據(jù)庫的一套標準,根據(jù)合成復用原則(組合/聚合優(yōu)先于繼承),在JPA中組合了不同數(shù)據(jù)庫廠商的抽象,此時就在功能層面和實現(xiàn)層面建立起了一座橋梁,無論是ORM框架個數(shù)還是數(shù)據(jù)庫廠商的個數(shù)都可以進行獨立的擴展了,而最終子類的個數(shù)僅是N+M

三.UML類圖

四.具體代碼

業(yè)務代碼

//抽象化角色
public abstract class JPA {
    protected JDBC jdbc;
    protected JPA(JDBC jdbc) {
        this.jdbc = jdbc;
    }
    public abstract void insert();
}
//擴展抽象化角色
class Hibernate extends JPA{
    protected Hibernate(JDBC jdbc) {
        super(jdbc);
    }
    @Override
    public void insert() {
       System.out.println("Hibernate環(huán)境");
       jdbc.insert();
    }
}
//擴展抽象化角色
class TopLink extends JPA{
    protected TopLink(JDBC jdbc) {
        super(jdbc);
    }
    @Override
    public void insert() {
        System.out.println("TopLink環(huán)境");
        jdbc.insert();
    }
}
interface JDBC{
   void insert();
}
//具體實現(xiàn)化角色
class MySQL implements JDBC{
    @Override
    public void insert() {
        System.out.println("MySQL執(zhí)行新增操作");
    }
}
//具體實現(xiàn)化角色
class Oracle implements JDBC{
    @Override
    public void insert() {
        System.out.println("Oracle執(zhí)行新增操作");
    }
}

客戶端

public class Client {
    public static void main(String[] args) {
        //數(shù)據(jù)庫廠商
        JDBC jdbc = new MySQL();
        //ORM框架
        JPA jpa = new Hibernate(jdbc);
        jpa.insert();
    }
}

五.優(yōu)缺點

優(yōu)點

  • 符合開閉原則
  • 符合合成復用原則
  • 抽象與實現(xiàn)分離,擴展能力極強

缺點

  • 組合/聚合關系建立在抽象層,增加系統(tǒng)的理解與設計難度

六.使用場景

  • 當一個系統(tǒng)存在兩個獨立變化的維度,且這兩個維度都需要進行擴展
  • 當一個系統(tǒng)不希望使用繼承或因為多層次繼承導致類的個數(shù)急劇增加

到此這篇關于Java結構型模式之橋接模式詳解的文章就介紹到這了,更多相關Java橋接模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • File的API和常用方法詳解_動力節(jié)點Java學院整理

    File的API和常用方法詳解_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了File的API和常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java面試常見模式問題---代理模式

    java面試常見模式問題---代理模式

    代理模式是常用的java設計模式,他的特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發(fā)給委托類,以及事后處理消息
    2021-06-06
  • java安全編碼指南之:聲明和初始化說明

    java安全編碼指南之:聲明和初始化說明

    這篇文章主要介紹了java安全編碼指南之:聲明和初始化說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot項目整合Log4j2實現(xiàn)自定義日志打印失效問題解決

    SpringBoot項目整合Log4j2實現(xiàn)自定義日志打印失效問題解決

    這篇文章主要介紹了SpringBoot項目整合Log4j2實現(xiàn)自定義日志打印失效問題解決,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • java system類使用方法示例 獲取系統(tǒng)信息

    java system類使用方法示例 獲取系統(tǒng)信息

    這篇文章主要介紹了java system類使用方法,該類中的方法都是靜態(tài)的。不能被實例化,沒有對外提供構造函數(shù),該類可以獲取系統(tǒng)信息
    2014-01-01
  • JavaBean和Map轉換封裝類的方法

    JavaBean和Map轉換封裝類的方法

    下面小編就為大家?guī)硪黄狫avaBean和Map轉換封裝類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • SpringCloud LoadBalancer自定義負載均衡器使用解析

    SpringCloud LoadBalancer自定義負載均衡器使用解析

    LoadBalancerClient 是 SpringCloud 提供的一種負載均衡客戶端,Ribbon 負載均衡組件內部也是集成了 LoadBalancerClient 來實現(xiàn)負載均衡,本文給大家深入解析 LoadBalancerClient 接口源碼,感興趣的朋友跟隨小編一起看看吧
    2023-04-04
  • Java實現(xiàn)獲取客戶端真實IP方法小結

    Java實現(xiàn)獲取客戶端真實IP方法小結

    本文給大家匯總介紹了2種使用java實現(xiàn)獲取客戶端真實IP的方法,主要用于獲取使用了代理訪問的來訪者的IP,有需要的小伙伴可以參考下。
    2016-03-03
  • Java web Hibernate如何與數(shù)據(jù)庫鏈接

    Java web Hibernate如何與數(shù)據(jù)庫鏈接

    這篇文章主要介紹了Java web Hibernate如何與數(shù)據(jù)庫鏈接,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • MybatisPlus代碼生成器含XML文件詳解

    MybatisPlus代碼生成器含XML文件詳解

    這篇文章主要介紹了MybatisPlus代碼生成器含XML文件詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論