亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

介紹

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

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

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

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

實現(xiàn)

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

實現(xiàn)化角色

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

具體實現(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);
}

擴展化抽象角色

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);
    }
}

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

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

總結

優(yōu)點

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

缺點

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

應用場景

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

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

    Maven引用自定義jar包方式

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

    JAVA+Hibernate 無限級分類

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

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

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

    Mac下設置Java默認版本的方法

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

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

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

最新評論