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

Java橋梁設(shè)計(jì)模式優(yōu)雅地將抽象與實(shí)現(xiàn)分離

 更新時(shí)間:2023年04月22日 08:39:15   作者:.番茄炒蛋  
Java橋接設(shè)計(jì)模式通過將抽象和實(shí)現(xiàn)分離,使得它們可以獨(dú)立地變化,從而實(shí)現(xiàn)更靈活的代碼結(jié)構(gòu)。它是一種優(yōu)雅的設(shè)計(jì)模式,適用于需要處理多個(gè)變化因素的復(fù)雜應(yīng)用程序

介紹

Java橋梁模式(也稱橋接模式)(Bridge Pattern)是一種設(shè)計(jì)模式,它將抽象和實(shí)現(xiàn)分離,使它們可以獨(dú)立地變化.它通過一個(gè)大類或者一系列緊密關(guān)聯(lián)的類拆分成兩個(gè)獨(dú)立的層次結(jié)構(gòu)來實(shí)現(xiàn)這種分離,其中一個(gè)層次結(jié)構(gòu)包含抽象類或接口,另一個(gè)層次結(jié)構(gòu)包含實(shí)現(xiàn)類.橋梁模式使得抽象類和實(shí)現(xiàn)類可以獨(dú)立地變化,從而實(shí)現(xiàn)了松耦合.

在Java中,橋梁模式通常使用接口來定義抽象部分,使用抽象類來實(shí)現(xiàn)部分實(shí)現(xiàn),并將它們通過組合的方式組合起來.抽象部分包含一個(gè)只想實(shí)現(xiàn)部分的引用,實(shí)現(xiàn)部分實(shí)現(xiàn)了抽象部分定義的接口.

Java橋梁模式分為以下四種角色:

  • 抽象化角色(Abstraction):定義抽象化的接口,維護(hù)一個(gè)指向?qū)崿F(xiàn)化對象的引用.
  • 擴(kuò)展抽象化角色(Refined Abstraction):擴(kuò)展抽象化角色,通常是抽象化角色的子類,實(shí)現(xiàn)抽象化角色中的業(yè)務(wù)方法.
  • 實(shí)現(xiàn)化角色(Implementor):定義實(shí)現(xiàn)化角色的接口,這個(gè)接口不一定要與抽象化角色的接口完全一致,事實(shí)上,這兩個(gè)接口可以完全不同.
  • 具體實(shí)現(xiàn)化角色(Concrete Implementor):具體實(shí)現(xiàn)化角色實(shí)現(xiàn)實(shí)現(xiàn)化角色接口,并完成具體的業(yè)務(wù)邏輯.

實(shí)現(xiàn)

例如,在電商網(wǎng)站中,可能需要支持多種支持方式,如支付寶,微信支付和銀聯(lián)支付等.使用橋梁模式可以輕松地添加或切換不同的支付方式,以滿足用戶的需求.

實(shí)現(xiàn)化角色

public interface PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    void processPayment(double amount);
}

具體實(shí)現(xiàn)化角色

public class AliPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("支付寶支付:" + amount + "元...");
    }
}
public class WechatPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("微信支付:" + amount + "元...");
    }
}
public class UnionpayPaymentImplementor implements PaymentImplementor {
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("銀聯(lián)支付:" + amount + "元...");
    }
}

抽象化角色

public abstract class Payment {
    protected PaymentImplementor implementor;
    public Payment(PaymentImplementor implementor) {
        this.implementor = implementor;
    }
    /**
     * 支付
     *
     * @param amount
     */
    public abstract void pay(double amount);
}

擴(kuò)展化抽象角色

public class OnlinePayment extends Payment{
    public OnlinePayment(PaymentImplementor implementor) {
        super(implementor);
    }
    /**
     * 支付
     *
     * @param amount
     */
    @Override
    public void pay(double amount) {
        System.out.println("開始在線支付...");
        implementor.processPayment(amount);
        System.out.println("在線支付完成...");
    }
}

測試

public class Demo {
    public static void main(String[] args) {
        // 支付寶支付
        PaymentImplementor paymentImplementor = new AliPaymentImplementor();
        Payment payment = new OnlinePayment(paymentImplementor);
        payment.pay(100);
        System.out.println();
        // 微信支付
        paymentImplementor = new WechatPaymentImplementor();
        payment = new OnlinePayment(paymentImplementor);
        payment.pay(101);
        System.out.println();
        // 銀聯(lián)支付
        paymentImplementor = new UnionpayPaymentImplementor();
        payment = new OnlinePayment(paymentImplementor);
        payment.pay(102);
    }
}

這段代碼是一個(gè)簡單的實(shí)現(xiàn)了橋梁模式的示例.其中,Payment是抽象類,OnlinePayment是其子類,PaymentImplementor是接口,AliPaymentImplementor,UnionpayPaymentImplementor和WechatPaymentImplementor都是其實(shí)現(xiàn)類.通過這種方式,Payment類PayImplementor接口被解耦,可以獨(dú)立地發(fā)展和擴(kuò)展.

在這個(gè)示例中,Payment類是抽象化,不能被實(shí)例化,而是通過OnlinePayment子類進(jìn)行實(shí)例化.OnlinePayment子類重寫了pay方法,并調(diào)用implementor.processPayment方法,該方法由實(shí)現(xiàn)PaymentImplementor接口的類來是心啊,例如,AliPaymentImplementor,UnionpayPaymentImplementor和WechatPaymentImplementor.這種方式使得PaymentImplementor接口的實(shí)現(xiàn)類可以動態(tài)地注入到OnlinePayment類中,從而實(shí)現(xiàn)了不同的支付方式,而不需要修改OnlinePayment類.

總結(jié)

優(yōu)點(diǎn)

  • 分離抽象和實(shí)現(xiàn)部分,使得它們可以獨(dú)立變化,從而增加了系統(tǒng)的靈活性和可擴(kuò)展性.
  • 通過抽象接口來管理對象之間的關(guān)系,更加符合面向?qū)ο缶幊痰脑瓌t,使得系統(tǒng)更加易于維護(hù)和理解.
  • 橋梁模式可以避免使用繼承造成的類爆炸問題,因?yàn)樗坪跤昧私M合關(guān)系.

缺點(diǎn)

  • 橋梁模式增加了系統(tǒng)的復(fù)雜性,需要額外的抽象層,可能會導(dǎo)致系統(tǒng)的設(shè)計(jì)變得復(fù)雜.
  • 如果不恰當(dāng)?shù)卦O(shè)計(jì)橋梁接口和實(shí)現(xiàn)類,可能會導(dǎo)致系統(tǒng)的耦合度增加.

應(yīng)用場景

  • 當(dāng)一個(gè)類具有多個(gè)變化維度(例如,一個(gè)形狀類有不同的顏色和尺寸)時(shí),可以使用橋梁模式來將它們分離開來,從而使得系統(tǒng)更加靈活.
  • 當(dāng)需要支持不同平臺,數(shù)據(jù)庫或協(xié)議時(shí),可以使用橋梁模式來封裝這些實(shí)現(xiàn)細(xì)節(jié),使得客戶端和實(shí)現(xiàn)部分可以獨(dú)立變化,而不影響彼此.
  • 當(dāng)需要運(yùn)行時(shí)動態(tài)地切換實(shí)現(xiàn)時(shí),可以使用橋梁模式來實(shí)現(xiàn)這種切換.

到此這篇關(guān)于Java橋梁設(shè)計(jì)模式優(yōu)雅地將抽象與實(shí)現(xiàn)分離的文章就介紹到這了,更多相關(guān)Java橋梁設(shè)計(jì)模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 內(nèi)存屏障由來及實(shí)現(xiàn)思路

    內(nèi)存屏障由來及實(shí)現(xiàn)思路

    這篇文章主要為大家詳細(xì)介紹了內(nèi)存屏障由來及實(shí)現(xiàn)思路的詳細(xì)講解,讓大家徹底的理解內(nèi)存屏障,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • Java Socket實(shí)現(xiàn)多線程通信功能示例

    Java Socket實(shí)現(xiàn)多線程通信功能示例

    這篇文章主要介紹了Java Socket實(shí)現(xiàn)多線程通信功能,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了java多線程通信的原理及客戶端、服務(wù)器端相應(yīng)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • Java過濾器doFilter里chain.doFilter()函數(shù)的理解

    Java過濾器doFilter里chain.doFilter()函數(shù)的理解

    這篇文章主要介紹了Java過濾器doFilter里chain.doFilter()函數(shù)的理解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 淺談Maven的build生命周期和常用plugin

    淺談Maven的build生命周期和常用plugin

    Maven和gradle應(yīng)該是現(xiàn)代java程序員中使用的最多的兩種構(gòu)建工具。在它們出現(xiàn)之前,則是ant的天下。本文將介紹Maven的build生命周期和常用plugin。
    2021-06-06
  • AntDesign多環(huán)境配置啟動過程詳解

    AntDesign多環(huán)境配置啟動過程詳解

    這篇文章主要為大家介紹了AntDesign多環(huán)境配置啟動過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Maven引用自定義jar包方式

    Maven引用自定義jar包方式

    這篇文章主要介紹了Maven引用自定義jar包方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JAVA+Hibernate 無限級分類

    JAVA+Hibernate 無限級分類

    主要看menu_id和parent_id這兩個(gè)字段。 Eclipse生成的表持久映射:(說明:自己加level屬性,作用:為了記錄種類所在深度)
    2008-07-07
  • Java+swing實(shí)現(xiàn)經(jīng)典貪吃蛇游戲

    Java+swing實(shí)現(xiàn)經(jīng)典貪吃蛇游戲

    貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,有PC和手機(jī)等多平臺版本。既簡單又耐玩。本文將通過java的swing來實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-01-01
  • Mac下設(shè)置Java默認(rèn)版本的方法

    Mac下設(shè)置Java默認(rèn)版本的方法

    今天工作的時(shí)候發(fā)現(xiàn)了一個(gè)錯誤,提示java版本太低,無法啟動!想起自己裝過高版本的Java,但是卻沒有默認(rèn)啟動,從網(wǎng)上找了一些資料,整理下現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-10-10
  • IDEA啟動tomcat狀態(tài)404的解決

    IDEA啟動tomcat狀態(tài)404的解決

    在使用Idea進(jìn)行Java?Web開發(fā)過程中,經(jīng)常會遇到Tomcat出現(xiàn)404錯誤的問題,本文就來介紹了IDEA啟動tomcat狀態(tài)404的解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評論