php設計模式之橋接模式

橋接模式

把抽象化與實現(xiàn)化解耦署穗,使得二者可以獨立變化芯义。這種類型的設計模式屬于結構型模式愕难,它通過提供抽象化和實現(xiàn)化之間的橋接結構早龟,來實現(xiàn)二者的解耦。將抽象部分與實現(xiàn)部分分離猫缭,使它們都可以獨立的變化葱弟。在有多種可能會變化的情況下,用繼承會造成類爆炸問題饵骨,擴展起來不靈活翘悉。實現(xiàn)系統(tǒng)可能有多個角度分類,每一種角度都可能變化居触。把這種多角度分類分離出來妖混,讓它們獨立變化,減少它們之間耦合轮洋。

目錄結構

|facade  #項目根目錄
|--Think  #核心類庫
|----main
|------road.php  #抽象公路角色
|------car.php  #抽象汽車接口
|----highSpeedRoad.php  #具體公路實現(xiàn)者 高速路
|----nationalRoad.php  #具體公路實現(xiàn)者 國道
|----sportsCar.php  #具體汽車車實現(xiàn)者 跑車
|----homeCar.php  #具體汽車實現(xiàn)者 家轎
|----Loder.php  #自動加載類
|--index.php #單一的入口文件

代碼實踐

抽象公路角色 Think/main/road.php

<?php
/**
 * 抽象公路角色
 */
namespace Think\main;

abstract class road{
    protected $_car;
    abstract function run();

    public function __construct(car $car) {
        $this->_car = $car;
    }
}

抽象汽車接口 Think/main/car.php

<?php
/**
 * 抽象汽車接口
 */
namespace Think\main;

interface car{
    function run();
}

具體公路實現(xiàn)者 高速路 Think/highSpeedRoad.php

<?php
/**
 * 具體公路實現(xiàn)者 高速路
 */
namespace Think;

use Think\main\road;

class highSpeedRoad extends road{
    public function run() {
        $this->_car->run();
        echo '開在高速路上'.PHP_EOL;
    }
}

具體公路實現(xiàn)者 國道 Think/nationalRoad.php

<?php
/**
 * 具體公路實現(xiàn)者 國道
 */
namespace Think;

use Think\main\road;

class nationalRoad extends road{
    public function run() {
        $this->_car->run();
        echo '開在國道上'.PHP_EOL;
    }
}

具體汽車車實現(xiàn)者 跑車 Think/sportsCar.php

<?php
/**
 * 具體汽車車實現(xiàn)者 跑車
 */
namespace Think;

use Think\main\car;

class sportsCar implements car{
    public function run() {
       echo "跑車";
    }
}

具體汽車實現(xiàn)者 家轎 Think/homeCar.php

<?php
/**
 *  具體汽車實現(xiàn)者 家轎
 */
namespace Think;

use Think\main\car;

class homeCar implements car{
    public function run() {
        echo '家轎';
    }
}

自動加載類 Think/Loder.php

<?php
namespace Think;

class Loder{
    static function autoload($class){
        require BASEDIR . '/' .str_replace('\\','/',$class) . '.php';
    }
}

入口文件index.php

<?php
define('BASEDIR',__DIR__);
include BASEDIR . '/Think/Loder.php';
spl_autoload_register('\\Think\\Loder::autoload');


//讓跑車開在高速公路上
$highSpeedRoad = new \Think\highSpeedRoad(new \Think\sportsCar());
$highSpeedRoad->run();
//讓家轎開在國道上
$nationalRoad = new \Think\nationalRoad(new \Think\homeCar());
$nationalRoad->run();

輸出

跑車開在高速路上
家轎開在國道上

優(yōu)點: 1制市、抽象和實現(xiàn)的分離。 2弊予、優(yōu)秀的擴展能力祥楣。 3、實現(xiàn)細節(jié)對客戶透明。

缺點:橋接模式的引入會增加系統(tǒng)的理解與設計難度误褪,由于聚合關聯(lián)關系建立在抽象層责鳍,要求開發(fā)者針對抽象進行設計與編程。

使用場景: 1兽间、如果一個系統(tǒng)需要在構件的抽象化角色和具體化角色之間增加更多的靈活性历葛,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關聯(lián)關系嘀略。 2恤溶、對于那些不希望使用繼承或因為多層次繼承導致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用帜羊。 3咒程、一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展讼育。

注意事項:對于兩個獨立變化的維度帐姻,使用橋接模式再適合不過了。

上一篇 php設計模式之外觀模式
下一篇 未完待續(xù)......

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末窥淆,一起剝皮案震驚了整個濱河市卖宠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忧饭,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筷畦,死亡現(xiàn)場離奇詭異词裤,居然都是意外死亡,警方通過查閱死者的電腦和手機鳖宾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門吼砂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鼎文,你說我怎么就攤上這事渔肩。” “怎么了拇惋?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵周偎,是天一觀的道長。 經(jīng)常有香客問我撑帖,道長蓉坎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任胡嘿,我火速辦了婚禮蛉艾,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己勿侯,他們只是感情好拓瞪,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著助琐,像睡著了一般吴藻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弓柱,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天沟堡,我揣著相機與錄音,去河邊找鬼矢空。 笑死航罗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的屁药。 我是一名探鬼主播粥血,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酿箭!你這毒婦竟也來了复亏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤缭嫡,失蹤者是張志新(化名)和其女友劉穎缔御,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妇蛀,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡耕突,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了评架。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眷茁。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纵诞,靈堂內的尸體忽然破棺而出上祈,到底是詐尸還是另有隱情,我是刑警寧澤浙芙,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布登刺,位于F島的核電站,受9級特大地震影響茁裙,放射性物質發(fā)生泄漏塘砸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一晤锥、第九天 我趴在偏房一處隱蔽的房頂上張望掉蔬。 院中可真熱鬧廊宪,春花似錦、人聲如沸女轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛉迹。三九已至傅寡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間北救,已是汗流浹背荐操。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留珍策,地道東北人托启。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像攘宙,于是被迫代替她去往敵國和親屯耸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個實際的業(yè)務功能:發(fā)送提示消息蹭劈×菩澹基本上所有帶業(yè)務流程處理的系統(tǒng)...
    七寸知架構閱讀 4,966評論 5 63
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用铺韧、多...
    MinoyJet閱讀 3,906評論 1 15
  • 【學習難度:★★★☆☆多矮,使用頻率:★★★☆☆】直接出處:橋接模式梳理和學習:https://github.com/...
    BruceOuyang閱讀 885評論 0 2
  • 在正式介紹橋接模式之前,我先跟大家談談兩種常見文具的區(qū)別祟蚀,它們是毛筆和蠟筆工窍。假如我們需要大中小3種型號的畫筆,能夠...
    justCode_閱讀 1,764評論 0 7
  • 跟你說個嚴肅的事前酿。 恩,你說吧鹏溯。 我們分手吧罢维! 為什么? 沒有為什么丙挽,沒有理由肺孵。 已經(jīng)和前女友分手四個半月了,從當...
    身穿禮服的黑烏鴉閱讀 317評論 0 0