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

Java設(shè)計(jì)模式中的橋接模式

 更新時(shí)間:2022年07月19日 09:36:14   作者:愛學(xué)習(xí)的大魚???????  
這篇文章主要介紹了Java設(shè)計(jì)模式中的橋接模式,其是一種結(jié)構(gòu)型設(shè)計(jì)模式,是指將實(shí)現(xiàn)與抽象放在兩個(gè)不同的類層次中,使兩個(gè)層次可以獨(dú)立改變

模式介紹

  • 橋接模式(Bridge模式)是指:將實(shí)現(xiàn)與抽象放在兩個(gè)不同的類層次中,使兩個(gè)層次可以獨(dú)立改變。
  • 是一種結(jié)構(gòu)型設(shè)計(jì)模式。
  • Bridge模式基于類的最小設(shè)計(jì)原則,通過使用封裝、聚合及繼承等行為讓不同的類承擔(dān)不同的職責(zé)。它的主要特點(diǎn)是把抽象(Abstraction)與行為實(shí)現(xiàn)(Implementation)分離開來,從而可以保持各部分的獨(dú)立性以及應(yīng)對(duì)他們的功能擴(kuò)展。

UML類圖

類圖說明:

  • Client類:橋接模式的調(diào)用者。
  • 抽象類(Abstraction) :維護(hù)了Implementor /即它的實(shí)現(xiàn)類Concretelmplementor…二者是聚合關(guān)系,Abstraction充當(dāng)橋接類
  • RefinedAbstraction:是Abstraction 抽象類的子類
  • Implementor: 行為實(shí)現(xiàn)類的接口
  • ConcretelmplementorA/B :行為的具體實(shí)現(xiàn)類
  • 從UML圖:這里的抽象類和接口是聚合的關(guān)系,其實(shí)調(diào)用和被調(diào)用關(guān)系

橋接模式案例

背景介紹: 客戶端通過橋接模式,根據(jù)手機(jī)功能和品牌進(jìn)行相應(yīng)功能的輸出

手機(jī)品牌接口類及實(shí)現(xiàn)子類

public interface Brand {
    void open();
    void close();
    void call();
}
public class XiaoMi implements Brand {
    @Override
    public void open() {
        System.out.println("小米手機(jī)開機(jī)");
    }
    @Override
    public void close() {
        System.out.println("小米手機(jī)關(guān)機(jī)");
    }
    @Override
    public void call() {
        System.out.println("小米手機(jī)打電話");
    }
}
public class Vivo implements Brand{
    @Override
    public void open() {
        System.out.println("Vivo手機(jī)開機(jī)");
    }
    @Override
    public void close() {
        System.out.println("Vivo手機(jī)關(guān)機(jī)");
    }
    @Override
    public void call() {
        System.out.println("Vivo手機(jī)打電話");
    }
}

手機(jī)抽象類及實(shí)現(xiàn)子類

public abstract class Phone {
    private Brand brand;
    public Phone(Brand brand) {
        this.brand = brand;
    }
    protected void open(){
        this.brand.open();
    }
    protected void close(){
        this.brand.close();
    }
    protected void call() {
        this.brand.call();
    }
}
public class FoldedPhone extends Phone{

    public FoldedPhone(Brand brand) {
        super(brand);
    }
    @Override
    protected void open() {
        super.open();
        System.out.println("折疊樣式手機(jī)");
    }
    @Override
    protected void close() {
        super.close();
        System.out.println("折疊樣式手機(jī)");
    }
    @Override
    protected void call() {
        super.call();
        System.out.println("折疊樣式手機(jī)");
    }
}
public class UpRightPhone extends Phone {
    public UpRightPhone(Brand brand) {
        super(brand);
    }
    @Override
    protected void open() {
        super.open();
        System.out.println("直立樣式手機(jī)");
    }
    @Override
    protected void close() {
        super.close();
        System.out.println("直立樣式手機(jī)");
    }
    @Override
    protected void call() {
        super.call();
        System.out.println("直立樣式手機(jī)");
    }
}

客戶端

public class Client {

    public static void main(String[] args) {
        Phone foldedPhone = new FoldedPhone(new XiaoMi());
        Phone upRightPhone = new UpRightPhone(new Vivo());
        foldedPhone.close();
        foldedPhone.open();
        foldedPhone.call();
        System.out.println("===============");
        upRightPhone.close();
        upRightPhone.open();
        upRightPhone.call();
    }
}

實(shí)現(xiàn)結(jié)果:

橋接模式的注意事項(xiàng)和細(xì)節(jié)

  • 實(shí)現(xiàn)了抽象和實(shí)現(xiàn)部分的分離,從而極大的提供了系統(tǒng)的靈活性,讓抽象部分和實(shí)現(xiàn)部分獨(dú)立開來,這有助于系統(tǒng)進(jìn)行分層設(shè)計(jì),從而產(chǎn)生更好的結(jié)構(gòu)化系統(tǒng)。
  • 對(duì)于系統(tǒng)的高層部分,只需要知道抽象部分和實(shí)現(xiàn)部分的接口就可以了,其它的部分由具體業(yè)務(wù)來完成。
  • 橋接模式替代多層繼承方案,可以減少子類的個(gè)數(shù),降低系統(tǒng)的管理和維護(hù)成本。
  • 橋接 模式的引入增加了系統(tǒng)的理解和設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對(duì)抽象進(jìn)行設(shè)。
  • 橋接 模式要求正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度(抽象、和實(shí)現(xiàn)),因此其使用范圍有-定的局限性,即需要有這樣的應(yīng)用場(chǎng)景。
  • 橋接模式其它應(yīng)用場(chǎng)景
    對(duì)于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用.

常見的應(yīng)用場(chǎng)景

  • JDBC驅(qū)動(dòng)程序
  • 銀行轉(zhuǎn)賬系統(tǒng)
    轉(zhuǎn)賬分類:網(wǎng)上轉(zhuǎn)賬,柜臺(tái)轉(zhuǎn)賬,AMT轉(zhuǎn)賬
    轉(zhuǎn)賬用戶類型:普通用戶,銀卡用戶,金卡用戶…
  • 消息管理
    消息類型:即時(shí)消息,延時(shí)消息
    消息分類:手機(jī)短信,郵件消息,QQ消息…

到此這篇關(guān)于Java設(shè)計(jì)模式中的橋接模式的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java.io.EOFException產(chǎn)生原因及解決方法(附代碼)

    java.io.EOFException產(chǎn)生原因及解決方法(附代碼)

    java.io.EOFException表示在讀取數(shù)據(jù)時(shí)突然遇到了文件或流的末尾,也就是說客戶端或服務(wù)器已經(jīng)關(guān)閉了連接,但是你還在嘗試讀取數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java.io.EOFException產(chǎn)生原因及解決的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • 一篇文章帶你入門java集合

    一篇文章帶你入門java集合

    Java的集合類型都是對(duì)java.util包中Collection接口的繼承,這里我們主要介紹依賴于collection的一些主分支,一起來看一下Java中的collection集合類型總結(jié)
    2021-08-08
  • 詳解spring boot Websocket使用筆記

    詳解spring boot Websocket使用筆記

    本篇文章主要介紹spring boot Websocket使用筆記,在springboot項(xiàng)目中使用websocket做推送,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-03-03
  • Feign調(diào)用可重試的最佳方案分享

    Feign調(diào)用可重試的最佳方案分享

    通過spring-retry框架集合Feign去實(shí)現(xiàn)重試機(jī)制,可以為每個(gè)調(diào)用實(shí)現(xiàn)不同的重試機(jī)制,那這究竟是如何做到的呢,本文將為大家詳細(xì)講講
    2023-01-01
  • java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)

    java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)

    這篇文章主要為大家介紹了java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解java模板和回調(diào)機(jī)制

    詳解java模板和回調(diào)機(jī)制

    這篇文章主要為大家詳細(xì)介紹了java模板和回調(diào)機(jī)制,學(xué)習(xí)java模板,感興趣的朋友可以參考一下
    2016-03-03
  • java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法示例

    java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法示例

    這篇文章主要介紹了java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java對(duì)象與json對(duì)象相互轉(zhuǎn)換實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Jmeter連接Mysql數(shù)據(jù)庫實(shí)現(xiàn)過程詳解

    Jmeter連接Mysql數(shù)據(jù)庫實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Jmeter連接Mysql數(shù)據(jù)庫實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring Boot外部化配置實(shí)戰(zhàn)解析

    Spring Boot外部化配置實(shí)戰(zhàn)解析

    這篇文章主要介紹了Spring Boot外部化配置實(shí)戰(zhàn)解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解

    Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解

    這篇文章主要介紹了Java用戶交互scanner及運(yùn)算結(jié)構(gòu)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論