最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解PHP設(shè)計(jì)模式之橋接模式

 更新時(shí)間:2022年12月20日 15:01:39   作者:程序員-南  
橋接,顧名思義,就是用來連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下

簡介

橋接模式又叫橋梁模式,屬于結(jié)構(gòu)型模式。目的是將抽象與實(shí)現(xiàn)分離,使它們都可以獨(dú)立的變化,解耦。繼承有很多好處,但是會增加耦合,而橋接模式偏向組合和聚合的方式來共享。

適用場景

不希望或不適用使用多繼承的場景。

一個(gè)類存在2個(gè)或更多的 獨(dú)立變化維度 , 并且這些維度都需要 獨(dú)立擴(kuò)展

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

解耦抽象和具體實(shí)現(xiàn),方便增加抽象和實(shí)現(xiàn)。優(yōu)秀的擴(kuò)充能力

符合開閉原則和合成復(fù)用原則。

缺點(diǎn)

增加了系統(tǒng)的理解與設(shè)計(jì)難度。

需要正確地識別出系統(tǒng)中,兩個(gè)獨(dú)立變化的維度。

擴(kuò)展

為什么要用橋接模式?

先說說繼承:

如果有一個(gè)手機(jī)類作為父類A,下面有各個(gè)牌子的手機(jī)作為子類B,又有每個(gè)牌子手機(jī)旗下的內(nèi)置應(yīng)用類C。此時(shí)如果有3個(gè)手機(jī)的牌子,那么內(nèi)置應(yīng)用的父類可能有30個(gè)。

如果因?yàn)樾枨笞冃枰黾邮謾C(jī)品牌B,或者接著有第四層的D類繼承第三層的內(nèi)置應(yīng)用類,想想這個(gè)是多么龐大的數(shù)量。后期難以維護(hù)。如果一旦父級發(fā)生變動,株連很多子類。

其實(shí)按照合成復(fù)用原則,也就是少用繼承(強(qiáng)耦合),多用組合(弱耦合)或者聚合(中耦合)

以上的問題,可以直接拆分成兩個(gè)大模塊:

手機(jī)類作為抽象,手機(jī)牌子作為具體的類。

內(nèi)置軟件可單獨(dú)抽象,每一個(gè)內(nèi)置的軟件作為具體的類。

然后讓讓兩個(gè)抽象進(jìn)行牽線搭橋,這邊是橋接模式的思路。

案例代碼

abstract class Mobile {
    abstract public function operate();
}
class HuaWei extends Mobile {
    public function operate() {
        echo '華為手機(jī)';
    }
}
class Vivo extends Mobile {
    public function operate() {
        echo 'Vivo手機(jī)';
    }
}
Abstract class Abstraction {
    protected $implementer;
    public function setImplementer ($implementer) {
        $this->implementer = $implementer;
    }
    public function run() {
        $this->implementer->operate();
    }
}
class HuaWeiApp extends Abstraction {
    public function run() {
        $this->implementer->operate();
    }
}
class VivoApp extends Abstraction {
    public function run() {
        $this->implementer->operate();
    }
}
//調(diào)用端
$ab = new HuaWeiApp();
$ab->setImplementer(new HuaWei);
$ab->run();
$ab = new VivoApp();
$ab->setImplementer(new Vivo);
$ab->run();

抽象代碼

//創(chuàng)建一個(gè)實(shí)現(xiàn)
abstract class Implementer {
    abstract public function operate();
}
class ImplementerA extends Implementer {
    public function operate() {
        echo 'ImplementerA';
    }
}
class ImplementerB extends Implementer {
    public function operate() {
        echo 'ImplementerB';
    }
}
Abstract class Abstraction {
    protected $implementer;
    //用組合的方式替代繼承
    public function setImplementer (Implementer $implementer) {
        $this->implementer = $implementer;
    }
    public function run() {
        $this->implementer->operate();
    }
}
class RefinedAbstraction extends Abstraction {
    public function run() {
        $this->implementer->operate();
    }
}
//調(diào)用端============================================================
$ab = new RefinedAbstraction();
$ab->setImplementer(new ImplementerA());
$ab->run();
$ab->setImplementer(new ImplementerB());
$ab->run();

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

相關(guān)文章

  • php在多維數(shù)組中根據(jù)鍵名快速查詢其父鍵以及父鍵值的代碼

    php在多維數(shù)組中根據(jù)鍵名快速查詢其父鍵以及父鍵值的代碼

    有一個(gè)多維數(shù)組,有多少維大家可以自定義。假如我們要在這個(gè)數(shù)組中找一個(gè)鍵為'subIndex'的值,我們可以用for、foreach等方法遍歷查找 反過來,假如我們?nèi)我饨o出一個(gè)或多個(gè)鍵,要求找出這個(gè)鍵的父級數(shù)組的鍵和值。這又如何實(shí)現(xiàn)?
    2011-05-05
  • 幾個(gè)php應(yīng)用技巧

    幾個(gè)php應(yīng)用技巧

    php小技巧PHP重定向
    2008-03-03
  • php打包網(wǎng)站并在線壓縮為zip

    php打包網(wǎng)站并在線壓縮為zip

    這篇文章主要介紹了php打包網(wǎng)站并在線壓縮為zip的相關(guān)資料,具有一定的參考價(jià)值,需要的朋友可以參考下
    2016-02-02
  • PHP高精確度運(yùn)算BC函數(shù)庫實(shí)例詳解

    PHP高精確度運(yùn)算BC函數(shù)庫實(shí)例詳解

    這篇文章主要介紹了PHP高精確度運(yùn)算BC函數(shù)庫,結(jié)合實(shí)例形式分析了BC函數(shù)庫中bccomp、bcadd、bcsub、bcmod、bcdiv、bcmul等函數(shù)的功能以及高精度數(shù)學(xué)運(yùn)算使用方法,需要的朋友可以參考下
    2017-08-08
  • PHP技術(shù)開發(fā)技巧分享

    PHP技術(shù)開發(fā)技巧分享

    本文檔的閱讀對象是有一定經(jīng)驗(yàn)的PHP程序員,文檔中將介紹在PHP開發(fā)中的一些開發(fā)技巧,希望能對讀者有一定的啟發(fā)。
    2010-03-03
  • php+mysql+jquery實(shí)現(xiàn)簡易的檢索自動補(bǔ)全提示功能

    php+mysql+jquery實(shí)現(xiàn)簡易的檢索自動補(bǔ)全提示功能

    這篇文章主要介紹了php+mysql+jquery實(shí)現(xiàn)簡易的檢索自動補(bǔ)全提示功能,涉及基于jQuery的ajax數(shù)據(jù)庫查詢與事件動態(tài)響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • php自定義函數(shù)實(shí)現(xiàn)JS的escape的方法示例

    php自定義函數(shù)實(shí)現(xiàn)JS的escape的方法示例

    這篇文章主要介紹了php自定義函數(shù)實(shí)現(xiàn)JS的escape的方法,結(jié)合完整實(shí)例形式分析了php實(shí)現(xiàn)JS的escape功能函數(shù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • php獲取地址欄信息的代碼

    php獲取地址欄信息的代碼

    有時(shí)候我們需要獲取地址欄的信息,然后進(jìn)行另外的數(shù)據(jù)輸出,下面的代碼就可以
    2008-10-10
  • ThinkPHP自動驗(yàn)證失敗的解決方法

    ThinkPHP自動驗(yàn)證失敗的解決方法

    引用ThinkPHP2.0開發(fā)手冊:ThinkPHP手冊類型檢查只是針對數(shù)據(jù)庫級別的驗(yàn)證,所以系統(tǒng)還內(nèi)置了數(shù)據(jù)對象的自動驗(yàn)證功能來完成模型的業(yè)務(wù)規(guī)則驗(yàn)證,而大多數(shù)情況下面,數(shù)據(jù)對象是由表單提交的$_POST數(shù)據(jù)創(chuàng)建。
    2011-06-06
  • PHP雙向鏈表定義與用法示例

    PHP雙向鏈表定義與用法示例

    這篇文章主要介紹了PHP雙向鏈表定義與用法,涉及php使用雙向鏈表類封裝雙向鏈表定義、讀取、刪除、插入等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評論

金门县| 嘉祥县| 锦屏县| 安远县| 潼南县| 银川市| 张家口市| 瑞丽市| 楚雄市| 芦溪县| 清新县| 乐平市| 高阳县| 崇左市| 武汉市| 基隆市| 古丈县| 铁岭县| 即墨市| 永年县| 海伦市| 桂平市| 博客| 贵定县| 南靖县| 泌阳县| 旺苍县| 赫章县| 图木舒克市| 洞头县| 沂源县| 许昌县| 凤山县| 团风县| 穆棱市| 营口市| 新疆| 五莲县| 确山县| 建平县| 克拉玛依市|