国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式——橋接模式

這篇具有很好參考價值的文章主要介紹了設(shè)計模式——橋接模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引用

我們大家都熟悉,顧名思義就是用來將河的兩岸聯(lián)系起來的。而此處的橋是用來將兩個獨立的結(jié)構(gòu)聯(lián)系起來,而這兩個被聯(lián)系起來的結(jié)構(gòu)可以獨立的變化,所有其他的理解只要建立在這個層面上就會比較容易。

基本介紹

  • 橋接模式(Bridge)是指將實現(xiàn)與抽象放在兩個不同的類層次中,是兩個層次可以獨立改變。
  • 該模式基于類的最小設(shè)計原則(擴展功能時盡量少的增加類),通過使用封裝、聚合、繼承等行為讓不同的類承擔(dān)不同的職責(zé)。
  • 主要特點是把抽象和行為實現(xiàn)分離開來,從而可以保持各部分的獨立性以及對他們的功能擴展。
  • 橋梁模式的用意是將抽象化與實現(xiàn)化脫耦,使得二者可以獨立地變化。

原理類圖

設(shè)計模式——橋接模式,設(shè)計模式,設(shè)計模式,橋接模式

?橋接(Bridge)模式包含以下主要角色:

  • client:橋接模式的調(diào)用者

  • Implementor:實現(xiàn)化角色,它是接口或者抽象類,定義角色必需的行為和屬性;這個接口不一定要與Abstraction的接口完全一致,事實上這兩個接口可以完全不同,一般而言,Implementor接口僅提供基本操作,而Abstraction定義的接口可能會做更多更復(fù)雜的操作。Implementor接口對這些基本操作進行了聲明,而具體實現(xiàn)交給其子類。通過關(guān)聯(lián)關(guān)系,Abstraction不僅擁有自己的方法,還可以調(diào)用Implementor中定義的方法,使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系;
  • ConcreteImplementor:具體實現(xiàn)化角色,實現(xiàn)接口或抽象類定義的方法或?qū)傩浴T诓煌腃oncreteImplementor中提供基本操作的不同實現(xiàn),在程序運行時,ConcreteImplementor對象將替換其父類對象,提供給抽象類具體的業(yè)務(wù)操作方法;
  • Abstraction:抽象化角色,定義出該角色的行為,同時保存一個對實現(xiàn)化角色的引用;它一般是抽象類而不是接口,其中定義了一個Implementor(實現(xiàn)類接口)類型的對象并可以維護該對象,它與Implementor之間具有關(guān)聯(lián)關(guān)系,它既可以包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)方法;
  • RefinedAbstraction:擴充抽象類角色,引用實現(xiàn)化角色對抽象化角色進行擴充。通常情況下,它不再是抽象類而是具體類,它實現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法,在RefinedAbstraction中可以調(diào)用在Implementor中定義的業(yè)務(wù)方法;

從UML圖看,這里的抽象類和接口是聚合關(guān)系,就是調(diào)用和被調(diào)用的關(guān)系;RefinedAbstraction的父類聚合了接口,RefinedAbstraction調(diào)用接口的具體實現(xiàn)

優(yōu)缺點

通過上面的講解,我們能很好的感覺到橋接模式遵循了里氏替換原則和依賴倒置原則,最終實現(xiàn)了開閉原則,對修改關(guān)閉,對擴展開放。這里將橋接模式的優(yōu)缺點總結(jié)如下。??

優(yōu)點:
  • 分離抽象接口及其實現(xiàn)部分。橋接模式使用“對象間的關(guān)聯(lián)關(guān)系”解耦了抽象和實現(xiàn)之間固有的綁定關(guān)系,使得抽象和實現(xiàn)可以沿著各自的維度來變化。所謂抽象和實現(xiàn)沿著各自維度的變化,也就是說抽象和實現(xiàn)不再在同一個繼承層次結(jié)構(gòu)中,而是“子類化”它們,使它們各自都具有自己的子類,以便任何組合子類,從而獲得多維度組合對象。
  • 在很多情況下,橋接模式可以取代多層繼承方案,多層繼承方案違背了“單一職責(zé)原則”,復(fù)用性較差,且類的個數(shù)非常多,橋接模式是比多層繼承方案更好的解決方法,它極大減少了子類的個數(shù)。
  • 橋接模式提高了系統(tǒng)的可擴展性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統(tǒng),符合“開閉原則”。
缺點:
  • 橋接模式的使用會增加系統(tǒng)的理解與設(shè)計難度,由于關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者一開始就針對抽象層進行設(shè)計與編程。
  • 橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度,因此其使用范圍具有一定的局限性,如何正確識別兩個獨立維度也需要一定的經(jīng)驗積累。

模式的實現(xiàn)

橋接模式的代碼如下:

package bridge;
public class BridgeTest {
    public static void main(String[] args) {
        Implementor imple = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(imple);
        abs.Operation();
    }
}
//實現(xiàn)化角色
interface Implementor {
    public void OperationImpl();
}
//具體實現(xiàn)化角色
class ConcreteImplementorA implements Implementor {
    public void OperationImpl() {
        System.out.println("具體實現(xiàn)化(Concrete Implementor)角色被訪問");
    }
}
//抽象化角色
abstract class Abstraction {
    protected Implementor imple;
    protected Abstraction(Implementor imple) {
        this.imple = imple;
    }
    public abstract void Operation();
}
//擴展抽象化角色
class RefinedAbstraction extends Abstraction {
    protected RefinedAbstraction(Implementor imple) {
        super(imple);
    }
    public void Operation() {
        System.out.println("擴展抽象化(Refined Abstraction)角色被訪問");
        imple.OperationImpl();
    }
}
?

程序的運行結(jié)果如下:

擴展抽象化(Refined Abstraction)角色被訪問
具體實現(xiàn)化(Concrete Implementor)角色被訪問

案例場景模擬

假設(shè)設(shè)計一個日志系統(tǒng),這個系統(tǒng)可以記錄多種日志類型,如交易日志,數(shù)據(jù)庫日志,用戶操作日志等,同時,這個系統(tǒng)還支持多種日志的表現(xiàn)形式。如xml文件,文本文件,數(shù)據(jù)庫庫數(shù)據(jù),E-mail等。

??? 抽象:日志的種類。

??? 實現(xiàn):日志的表現(xiàn)方式。

實現(xiàn)代碼如下:

Log源代碼

public abstract class Log{
    protected LogSave logSave;
    public Log(LogSave logSave){
        this.logSave=logSave;
    }
    public abstract void writeToLog();
}

LogSave源代碼

public abstract class LogSave{
    public abstract void write();
}

下面是三個Log的子類

TradLog源代碼

public class TradLog extends Log{
    public TradLog(LogSave logSave){
        super(logSave);
    }
   
   @Override
   public void writeToLog(){
       System.out.println("寫入TradLog數(shù)據(jù)");
       this.logSave.write();
   }
}

DbLog源代碼

public class DbLog extends Log{
    public DbLog(LogSave logSave){
        super(logSave);
    }
   
   @Override
   public void writeToLog(){
       System.out.println("寫入DbLog數(shù)據(jù)");
       this.logSave.write();
   }
}

UserLog源代碼

public class UserLog extends Log{
    public UserLog(LogSave logSave){
        super(logSave);
    }
   
   @Override
   public void writeToLog(){
       System.out.println("寫入UserLog數(shù)據(jù)");
       this.logSave.write();
   }
}

下面是LogSave的三個實現(xiàn)類

XmlImpl源代碼

public class XmlImpl extends LogSave{
    @Override
    public void write(){
        System.out.println("使用xml方式存儲");
    }
}

TextImpl源代碼

public class TextImpl extends LogSave{
    @Override
    public void write(){
        System.out.println("使用文本方式存儲");
    }
}

?EmailImpl源代碼

public class EmailImpl extends LogSave{
    @Override
    public void write(){
        System.out.println("使用發(fā)郵件的方式存儲");
    }
}

實現(xiàn)不能和抽象發(fā)生耦合,而只能由抽象和實現(xiàn)發(fā)生耦合。

下面是啟動類展示最終結(jié)果:

Client源代碼

public class Client{
    public static void main(String[] args){
        Log log=new UserLog(new XmlImpl());
        log.writeToLog();
        
        Log log2=new DbLog(new EmailImpl());
        log2.writeToLog();
    }
}

運行結(jié)果如下:

寫入UserLog數(shù)據(jù)

使用xml方式存儲

寫入DbLog數(shù)據(jù)

使用發(fā)郵件的方式存儲

應(yīng)用場景

  • 如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。
  • 對于那些不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
  • 一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。
  • 常用的場景:
    • JDBC驅(qū)動程序
    • 日志框架
    • 銀行轉(zhuǎn)賬系統(tǒng)
      • 轉(zhuǎn)賬分類:網(wǎng)上轉(zhuǎn)賬、柜臺轉(zhuǎn)賬、ATM轉(zhuǎn)賬
      • 用戶類型:普通用戶、銀卡用戶、金卡用戶
    • 消息管理
      • 消息類型:即時消息、延時消息
      • 消息分類:手機短信、郵件信息、QQ消息

橋接模式模式的擴展

在軟件開發(fā)中,有時橋接(Bridge)模式可與適配器模式聯(lián)合使用。當(dāng)橋接(Bridge)模式的實現(xiàn)化角色的接口與現(xiàn)有類的接口不一致時,可以在二者中間定義一個適配器將二者連接起來,其具體結(jié)構(gòu)圖如圖橋接模式與適配器模式聯(lián)用的結(jié)構(gòu)圖所示。

設(shè)計模式——橋接模式,設(shè)計模式,設(shè)計模式,橋接模式文章來源地址http://www.zghlxwxcb.cn/news/detail-657644.html

小結(jié)

  • 對于系統(tǒng)的高層來說,只需要知道抽象部分和實現(xiàn)部分的接口就夠了,其他部分由具體業(yè)務(wù)來完成
  • 橋接模式代替多層繼承方案,可以減少子類的個數(shù),降低系統(tǒng)的管理和維護成本
  • 橋接模式要求正確識別出系統(tǒng)中的兩個獨立變化維度,因此其使用范圍有一定的局限性,適用于一定的應(yīng)用場景

到了這里,關(guān)于設(shè)計模式——橋接模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式:橋接模式

    橋接模式(Bridge Pattern):旨在將抽象部分和實現(xiàn)部分解耦,使它們可以獨立地變化。這種模式通過將抽象和實現(xiàn)分離,使它們可以獨立地進行擴展和修改,而不會相互影響。它是一種對象結(jié)構(gòu)型模式,又稱為柄體(Handle and Body)模式或接口(Interface)模式。 假如需要使用大

    2024年01月25日
    瀏覽(15)
  • 【設(shè)計模式】橋接模式

    【設(shè)計模式】橋接模式

    橋接(Bridge)是用于把抽象化與實現(xiàn)化解耦,使得二者可以獨立變化。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實現(xiàn)化之間的橋接結(jié)構(gòu),來實現(xiàn)二者的解耦。 這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立于接口實現(xiàn)類,這兩種類型的類可被結(jié)

    2024年02月13日
    瀏覽(22)
  • 設(shè)計模式-橋接模式

    設(shè)計模式-橋接模式

    適配器模式 類似,以后也會遇到意思接近一樣的設(shè)計模式。在開發(fā)中一般多個模式混用,且根據(jù)不同的場景進行搭配,橋接模式也是 結(jié)構(gòu)型模式 將抽象的部分和實現(xiàn)的部分分離,使它們都可以獨立的變化。通俗來說,就是通過組合來 橋接 其它的 行為或維度 與適配器模式業(yè)

    2024年02月11日
    瀏覽(25)
  • 【前端設(shè)計模式】之橋接模式

    【前端設(shè)計模式】之橋接模式

    設(shè)計模式是在軟件開發(fā)中經(jīng)過驗證的解決問題的方法。它們是從經(jīng)驗中總結(jié)出來的,可以幫助我們更好地組織和管理代碼,提高代碼的可維護性、可擴展性和可重用性。無論是前端還是后端開發(fā),設(shè)計模式都扮演著重要的角色。在本專欄中,我們將探索一些常見的前端設(shè)計模

    2024年02月04日
    瀏覽(22)
  • js設(shè)計模式:橋接模式

    js設(shè)計模式:橋接模式

    可以將復(fù)雜的類進行一些拆分,讓抽象和實現(xiàn)進行分離解耦,可以讓每一個部分都可以單獨維護 方便擴展和維護

    2024年02月22日
    瀏覽(24)
  • 設(shè)計模式-橋接模式(Bridge)

    橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計模式,用于將抽象部分和實現(xiàn)部分分離,使它們可以獨立地變化。這種分離允許你將一個類的功能層次結(jié)構(gòu)(抽象)與另一個類的實現(xiàn)層次結(jié)構(gòu)(實現(xiàn))分開,從而在不同層次上進行修改和擴展。在本篇博客中,我們將詳細介紹橋接

    2024年02月09日
    瀏覽(20)
  • Java設(shè)計模式-橋接模式

    Java設(shè)計模式-橋接模式

    橋接模式是將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。 這個概念聽著那是相當(dāng)拗口了,其實通過例子解釋后,就能很好的理解了。 下面先看一個例子,這個例子表現(xiàn)了手機與手機軟件之間的關(guān)系 2.1HandsetSoft類 這個類是手機軟件的抽象類 2.2HandSetGame類 這個是

    2024年02月16日
    瀏覽(20)
  • 【結(jié)構(gòu)型設(shè)計模式】C#設(shè)計模式之橋接模式

    題目:設(shè)計一個橋接模式來實現(xiàn)圖形和顏色之間的解耦。 解析: 橋接模式是一種結(jié)構(gòu)型設(shè)計模式,它將抽象部分與實現(xiàn)部分分離,使它們可以獨立變化。在這個例子中,抽象部分是圖形(如圓形、正方形),實現(xiàn)部分是顏色(如紅色、藍色)。 我們可以使用橋接模式來解耦

    2024年02月13日
    瀏覽(30)
  • Java設(shè)計模式之 -- 橋接模式

    橋接模式是一種結(jié)構(gòu)型設(shè)計模式,也被稱為“Handle/Body”。這種設(shè)計模式主要用于將抽象部分與它的實現(xiàn)部分分離,使它們可以獨立地變化。這種方式有助于減少系統(tǒng)中的耦合性,增加了擴展性。 橋接模式主要解決的是類的維度擴展問題。在一個多維度變化的類中,使用繼承

    2024年02月15日
    瀏覽(28)
  • 結(jié)構(gòu)型設(shè)計模式——橋接模式

    結(jié)構(gòu)型設(shè)計模式——橋接模式

    橋接模式(Bridge pattern): 使用橋接模式通過將實現(xiàn)和抽象放在兩個不同的類層次中而使它們可以獨立改變。 橋接模式 (Bridge) 是一種結(jié)構(gòu)型設(shè)計模式, 可將 抽象 部分與 實現(xiàn) 部分 分離 ,使它們都可以獨立的變化。如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更

    2024年02月07日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包