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

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

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

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔> 學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您:
想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識點(diǎn)…
一個人摸索學(xué)習(xí)很難堅持,想組團(tuán)高效學(xué)習(xí)…
想寫博客但無從下手,急需寫作干貨注入能量…
熱愛寫作,愿意讓自己成為更好的人…


一、概述

現(xiàn)在有一個需求,需要創(chuàng)建不同的圖形,并且每個圖形都有可能會有不同的顏色。我們可以利用繼承的方式來設(shè)計類的關(guān)系:
設(shè)計模式之橋接模式【結(jié)構(gòu)型模式】,軟件設(shè)計模式,設(shè)計模式,橋接模式,java,軟件工程
我們可以發(fā)現(xiàn)有很多的類,假如我們再增加一個形狀或再增加一種顏色,就需要創(chuàng)建更多的類。

試想,在一個有多種可能會變化的維度的系統(tǒng)中,用繼承方式會造成類爆炸,擴(kuò)展起來不靈活。每次在一個維度上新增一個具體實(shí)現(xiàn)都要增加多個子類。為了更加靈活的設(shè)計系統(tǒng),我們此時可以考慮使用橋接模式。

定義:

? 將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來實(shí)現(xiàn),從而降低了抽象和實(shí)現(xiàn)這兩個可變維度的耦合度。

二、結(jié)構(gòu)

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

  • 抽象化(Abstraction)角色 :定義抽象類,并包含一個對實(shí)現(xiàn)化對象的引用。
  • 擴(kuò)展抽象化(Refined Abstraction)角色 :是抽象化角色的子類,實(shí)現(xiàn)父類中的業(yè)務(wù)方法,并通過組合關(guān)系調(diào)用實(shí)現(xiàn)化角色中的業(yè)務(wù)方法。
  • 實(shí)現(xiàn)化(Implementor)角色 :定義實(shí)現(xiàn)化角色的接口,供擴(kuò)展抽象化角色調(diào)用。
  • 具體實(shí)現(xiàn)化(Concrete Implementor)角色 :給出實(shí)現(xiàn)化角色接口的具體實(shí)現(xiàn)。

三、案例

【例】視頻播放器

需要開發(fā)一個跨平臺視頻播放器,可以在不同操作系統(tǒng)平臺(如Windows、Mac、Linux等)上播放多種格式的視頻文件,常見的視頻格式包括RMVB、AVI、WMV等。該播放器包含了兩個維度,適合使用橋接模式。

類圖如下:
設(shè)計模式之橋接模式【結(jié)構(gòu)型模式】,軟件設(shè)計模式,設(shè)計模式,橋接模式,java,軟件工程

代碼如下:

//視頻文件
public interface VideoFile {
    void decode(String fileName);
}

//avi文件
public class AVIFile implements VideoFile {
    public void decode(String fileName) {
        System.out.println("avi視頻文件:"+ fileName);
    }
}

//rmvb文件
public class REVBBFile implements VideoFile {

    public void decode(String fileName) {
        System.out.println("rmvb文件:" + fileName);
    }
}

//操作系統(tǒng)版本
public abstract class OperatingSystemVersion {

    protected VideoFile videoFile;

    public OperatingSystemVersion(VideoFile videoFile) {
        this.videoFile = videoFile;
    }

    public abstract void play(String fileName);
}

//Windows版本
public class Windows extends OperatingSystemVersion {

    public Windows(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
        videoFile.decode(fileName);
    }
}

//mac版本
public class Mac extends OperatingSystemVersion {

    public Mac(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
		videoFile.decode(fileName);
    }
}

//測試類
public class Client {
    public static void main(String[] args) {
        //創(chuàng)建Windows系統(tǒng)對象
        OperatingSystemVersion os = new Windows(new AVIFile());
        //使用操作系統(tǒng)播放視頻文件
        os.play("戰(zhàn)狼3");
        //創(chuàng)建MAC系統(tǒng)對象
        OperatingSystemVersion os1 = new Mac(new REVBBFile());
        //使用操作系統(tǒng)播放視頻文件
        os1.play("戰(zhàn)狼2");
    }
}

設(shè)計模式之橋接模式【結(jié)構(gòu)型模式】,軟件設(shè)計模式,設(shè)計模式,橋接模式,java,軟件工程

設(shè)計模式之橋接模式【結(jié)構(gòu)型模式】,軟件設(shè)計模式,設(shè)計模式,橋接模式,java,軟件工程

好處:

  • 橋接模式提高了系統(tǒng)的可擴(kuò)充性,在兩個變化維度中任意擴(kuò)展一個維度,都不需要修改原有系統(tǒng)。

    如:如果現(xiàn)在還有一種視頻文件類型wmv,我們只需要再定義一個類實(shí)現(xiàn)VideoFile接口即可,其他類不需要發(fā)生變化。

  • 實(shí)現(xiàn)細(xì)節(jié)對客戶透明

四、使用場景

  • 當(dāng)一個類存在兩個獨(dú)立變化的維度,且這兩個維度都需要進(jìn)行擴(kuò)展時。
  • 當(dāng)一個系統(tǒng)不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加時。
  • 當(dāng)一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性時。避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。

總結(jié)

以上就是設(shè)計模式之橋接模式【結(jié)構(gòu)型模式】的相關(guān)知識點(diǎn),希望對你有所幫助。
積跬步以至千里,積怠惰以至深淵。時代在這跟著你一起努力哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-822292.html

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

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

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

相關(guān)文章

  • 【Java 設(shè)計模式】結(jié)構(gòu)型之橋接模式

    【Java 設(shè)計模式】結(jié)構(gòu)型之橋接模式

    橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計模式, 它將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化,從而降低它們之間的耦合 。橋接模式通過將抽象部分和實(shí)現(xiàn)部分分離,使得它們可以獨(dú)立地變化,同時在它們之間建立一個橋梁。在本文中,我們將介紹 Java 中橋接模式的

    2024年01月19日
    瀏覽(21)
  • c#設(shè)計模式-結(jié)構(gòu)型模式 之 橋接模式

    c#設(shè)計模式-結(jié)構(gòu)型模式 之 橋接模式

    ????????橋接模式是一種設(shè)計模式,它將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。這種模式涉及到一個接口作為橋梁,使實(shí)體類的功能獨(dú)立于接口實(shí)現(xiàn)類。這兩種類型的類可以結(jié)構(gòu)化改變而互不影響。 ????????橋接模式的主要目的是通過將實(shí)現(xiàn)和抽象分離,使兩者可以

    2024年02月12日
    瀏覽(19)
  • 笨蛋學(xué)設(shè)計模式結(jié)構(gòu)型模式-橋接模式【11】

    7.5.1概念 ? 橋接模式主要將抽象部分與實(shí)現(xiàn)部分分離開來,使得它們可以相互獨(dú)立地變化。抽象部分定義了一個抽象類或接口,包含一些基本操作以及包含一個指向?qū)崿F(xiàn)部分的引用。實(shí)現(xiàn)部分也是一個抽象類或接口,定義了一些具體的操作。 7.5.2場景 ? 比如在路上隨處可見

    2024年01月17日
    瀏覽(29)
  • 《golang設(shè)計模式》第二部分·結(jié)構(gòu)型模式-02-橋接模式(Bridge)

    《golang設(shè)計模式》第二部分·結(jié)構(gòu)型模式-02-橋接模式(Bridge)

    橋(Bridge)使用組合關(guān)系將代碼的實(shí)現(xiàn)層和抽象層分離,讓實(shí)現(xiàn)層與抽象層代碼可以分別自由變化。 例如 客戶端調(diào)用橋接接口實(shí)現(xiàn)原有功能和擴(kuò)展功能的組合 Implementor(實(shí)施者): 具體實(shí)施者的抽象,可以是一個接口。 Concrete Implementor(具體實(shí)施者): 可以理解為擴(kuò)展之前

    2024年02月12日
    瀏覽(19)
  • Java設(shè)計模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    Java設(shè)計模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計 四、案例分析 4.1、支付方式 4.2、支付渠道? 五、總結(jié) 橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計模式,其主要目的是“將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化”。 橋接模式的核心思想是把抽象(abstraction)與實(shí)現(xiàn)

    2024年02月13日
    瀏覽(22)
  • 設(shè)計模式-04.01-結(jié)構(gòu)型-代理&橋接&裝飾器&適配器

    設(shè)計模式-04.01-結(jié)構(gòu)型-代理&橋接&裝飾器&適配器

    創(chuàng)建型模式比較好理解,后面的結(jié)構(gòu)型和行為型設(shè)計模式不是那么好理解。如果遇到不好理解的設(shè)計模式,我一般會在開頭舉比較簡單的Demo案例來幫助理解。 前面幾節(jié),我們講了設(shè)計模式中的創(chuàng)建型模式。創(chuàng)建型模式主要解決對象的創(chuàng)建問題,封裝復(fù)雜的創(chuàng)建過程,解耦對

    2024年02月09日
    瀏覽(24)
  • 軟件設(shè)計實(shí)驗(yàn)三 結(jié)構(gòu)型設(shè)計模式實(shí)驗(yàn)

    軟件設(shè)計實(shí)驗(yàn)三 結(jié)構(gòu)型設(shè)計模式實(shí)驗(yàn)

    1.結(jié)合實(shí)例,熟練繪制常見的結(jié)構(gòu)型設(shè)計模式結(jié)構(gòu)圖。 2.結(jié)合實(shí)例,熟練使用任意一種面向?qū)ο缶幊陶Z言實(shí)現(xiàn)常見的結(jié)構(gòu)型設(shè)計模式。 3.通過本實(shí)驗(yàn),理解每一種結(jié)構(gòu)型設(shè)計模式的模式動機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代碼實(shí)現(xiàn)這些設(shè)計模式。 1.現(xiàn)有一個接口DataOperation定義

    2024年02月03日
    瀏覽(40)
  • 軟件工程(十三) 設(shè)計模式之結(jié)構(gòu)型設(shè)計模式(一)

    軟件工程(十三) 設(shè)計模式之結(jié)構(gòu)型設(shè)計模式(一)

    前面我們記錄了創(chuàng)建型設(shè)計模式,知道了通過各種模式去創(chuàng)建和管理我們的對象。但是除了對象的創(chuàng)建,我們還有一些結(jié)構(gòu)型的模式。 簡要說明 將一個類的接口轉(zhuǎn)換為用戶希望得到的另一個接口。它使原本不相同的接口得以協(xié)同工作。 速記 轉(zhuǎn)換接口 類圖如下 角色說

    2024年02月11日
    瀏覽(30)
  • 軟件工程(十四) 設(shè)計模式之結(jié)構(gòu)型模式(二)

    軟件工程(十四) 設(shè)計模式之結(jié)構(gòu)型模式(二)

    簡要說明 將對象組合成樹形結(jié)構(gòu)以表示“整體-部分”的層次結(jié)構(gòu),使得用戶對單個對象和組合對象的使用具有一致性。 速記 樹形目錄結(jié)構(gòu) 類圖如下 由類圖其實(shí)可以看出,組合模式就是將具有父子關(guān)系的結(jié)構(gòu),組裝形成一棵樹,并且根據(jù)規(guī)范,樹干節(jié)點(diǎn)和葉子節(jié)點(diǎn)均

    2024年02月11日
    瀏覽(26)
  • 設(shè)計模式--------結(jié)構(gòu)型模式

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

    結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機(jī)制來組織接口和類,后者釆用組合或聚合來組合對象。 由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象結(jié)構(gòu)型模式比類結(jié)構(gòu)

    2024年02月13日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包