PHP設(shè)計模式(八)—外觀模式(Facade Pattern)

外觀模式 (Facade Pattern): 為子系統(tǒng)中的一組接口提供一個一致的界面棚菊,定義一個高層接口民轴,這個接口使得這一子系統(tǒng)更加容易使用。

(一)為什么需要外觀模式

1幕侠,開發(fā)階段,子系統(tǒng)越來越復(fù)雜,增加外觀模式提供一個簡單的調(diào)用接口凶杖。

2,維護一個大型遺留系統(tǒng)的時候杈湾,可能這個系統(tǒng)已經(jīng)非常難以維護和擴展,但又包含非常重要的功能,為其開發(fā)一個外觀類抹恳,以便新系統(tǒng)與其交互健霹。

3宣吱,外觀模式可以隱藏來自調(diào)用對象的復(fù)雜性杭攻。

(二)外觀模式UML圖

Facade Pattern

(三)簡單實例

比如說我們?nèi)メt(yī)院就診锅睛,醫(yī)院有醫(yī)生員工系統(tǒng)历谍,有藥品系統(tǒng)现拒,有患者資料系統(tǒng)。但是我們只是在前臺掛個號望侈,就能在其他系統(tǒng)里都看到我們印蔬。外觀系統(tǒng)就差不多這樣扛点。

如果沒有掛號系統(tǒng)的話,我們就先要去醫(yī)生系統(tǒng)通知一下醫(yī)生奥帘,
然后去患者系統(tǒng)取一下患者資料交給醫(yī)生已旧,再去藥品系統(tǒng)登記一下,最后到藥房領(lǐng)藥檀咙。

<?php
//醫(yī)院醫(yī)生員工系統(tǒng)
class DoctorSystem{

    //通知就診醫(yī)生
    static public function getDoctor($name){
        echo __CLASS__.":".$name."醫(yī)生,掛你號".PHP_EOL;
        return new Doctor($name);
    }
}
//醫(yī)生類
class Doctor{
    public $name;
    public function __construct($name){
        $this->name = $name;
    }
    public function prescribe($data){
        echo __CLASS__.":"."開個處方給你".PHP_EOL;
        return "祖?zhèn)髅胤搅Ь鳎幍奖厮?;
    }
}
//患者系統(tǒng)
class SufferSystem {
    static function getData($suffer){
        $data = $suffer."資料";
        echo  __CLASS__.":".$suffer."的資料是這些".PHP_EOL ;
        return  $data;
    }
}
//醫(yī)藥系統(tǒng)
class MedicineSystem {
    static function register($prescribe){
        echo __CLASS__.":"."拿到處方:".$prescribe."------------通知藥房發(fā)藥了".PHP_EOL;
        Shop::setMedicine("砒霜5千克");
    }
}
//藥房
class shop{
    static public $medicine;
    static function setMedicine($medicine){
        self::$medicine = $medicine;
    }
    static function getMedicine(){
        echo __CLASS__.":".self::$medicine.PHP_EOL;
    }
}

//如果沒有掛號系統(tǒng)棕诵,我們就診的第一步
//通知就診醫(yī)生
$doct = DoctorSystem::getDoctor("顧夕衣");
//患者系統(tǒng)拿病歷資料
$data = SufferSystem::getData("何在");
//醫(yī)生看病歷資料裁良,開處方
$prscirbe = $doct->prescribe($data);
//醫(yī)藥系統(tǒng)登記處方
MedicineSystem::register($prscirbe);
//藥房拿藥
Shop::getMedicine();

echo PHP_EOL.PHP_EOL."--------有了掛號系統(tǒng)以后--------".PHP_EOL.PHP_EOL;

//掛號系統(tǒng)
class Facade{
    static public function regist($suffer,$doct){
        $doct = DoctorSystem::getDoctor($doct);
        //患者系統(tǒng)拿病歷資料
        $data = SufferSystem::getData($suffer);
        //醫(yī)生看病歷資料,開處方
        $prscirbe = $doct->prescribe($data);
        //醫(yī)藥系統(tǒng)登記處方
        MedicineSystem::register($prscirbe);
        //藥房拿藥
        Shop::getMedicine();
    }
}
//患者只需要掛一個號校套,其他的就讓掛號系統(tǒng)去做吧趴久。
Facade::regist("葉好龍","賈中一");

外觀模式,也叫門面模式搔确。它多用于在多個子系統(tǒng)之間彼棍,作為中間層。用戶通過Facade對象膳算,直接請求工作座硕,省去了用戶調(diào)用多個子系統(tǒng)的復(fù)雜動作。

外觀模式常舉的一個例子涕蜂,就是我們買了好多支股票华匾,但是時間有限。盯盤很復(fù)雜机隙,我們搞得一團糟蜘拉。所以,我們干脆買了股票基金有鹿。股票基金就好比于外觀模式的Facade對象旭旭,而子系統(tǒng)就是股票基金投的各支股票。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葱跋,一起剝皮案震驚了整個濱河市持寄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娱俺,老刑警劉巖稍味,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荠卷,居然都是意外死亡模庐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門油宜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掂碱,“玉大人,你說我怎么就攤上這事验庙《ニ保” “怎么了社牲?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵粪薛,是天一觀的道長。 經(jīng)常有香客問我搏恤,道長违寿,這世上最難降的妖魔是什么湃交? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮藤巢,結(jié)果婚禮上搞莺,老公的妹妹穿的比我還像新娘。我一直安慰自己掂咒,他們只是感情好才沧,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍刮,像睡著了一般温圆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孩革,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天岁歉,我揣著相機與錄音,去河邊找鬼膝蜈。 笑死锅移,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饱搏。 我是一名探鬼主播非剃,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼推沸!你這毒婦竟也來了努潘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤坤学,失蹤者是張志新(化名)和其女友劉穎疯坤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體深浮,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡压怠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了飞苇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菌瘫。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖布卡,靈堂內(nèi)的尸體忽然破棺而出雨让,到底是詐尸還是另有隱情,我是刑警寧澤忿等,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布栖忠,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庵寞。R本人自食惡果不足惜狸相,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捐川。 院中可真熱鬧脓鹃,春花似錦、人聲如沸古沥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岩齿。三九已至尊浓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纯衍,已是汗流浹背栋齿。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留襟诸,地道東北人瓦堵。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像歌亲,于是被迫代替她去往敵國和親菇用。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容