php設(shè)計模式之外觀模式

外觀模式

為子系統(tǒng)中的一組接口提供一個一致的界面,定義一個高層接口沦童,這個接口使得這一子系統(tǒng)更加容易使用,外觀模式又稱門面模式
使用外觀模式的原因:
1,開發(fā)階段,子系統(tǒng)越來越復(fù)雜空骚,增加外觀模式提供一個簡單的調(diào)用接口。
2,維護(hù)一個大型遺留系統(tǒng)的時候擂仍,可能這個系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展囤屹,但又包含非常重要的功能,為其開發(fā)一個外觀類逢渔,以便新系統(tǒng)與其交互肋坚。
3,外觀模式可以隱藏來自調(diào)用對象的復(fù)雜性。

外觀模式的目的在于降低系統(tǒng)的復(fù)雜程度

目錄結(jié)構(gòu)

|facade  #項目根目錄
|--Think  #核心類庫
|----depot.php  #倉庫類
|----facade.php  #外觀角色
|----Loder.php  #自動加載類
|----orders.php  #訂單類
|----products.php  #商品類
|----user.php  #用戶系統(tǒng)
|--index.php #單一的入口文件

代碼實踐

商品類 Think/products.php

<?php
/**
 * 商品類
 */
namespace Think;

class products{
    //查詢購買的商品
    static function getProduct($product) {
        //查看商品庫存等信息...
        return '商品'.$product;
    }
}

訂單類 Think/orders.php

<?php
/**
 * 訂單類
 */
namespace Think;

class orders{
    static $product;
    //添加訂單產(chǎn)品
    static function pushProduct($product){
        self::$product = $product;
    }
    //添加用戶信息肃廓,生成訂單
    static function createOrder($name){
        return $name."購買的".self::$product.PHP_EOL;
    }
}

用戶系統(tǒng) Think/user.php

<?php
/**
 * 用戶系統(tǒng)
 */
namespace Think;

class user{
    //完善用戶資料
    static function setDate($name){
        $data = "用戶名為".$name;
        return $data;
    }
}

倉庫類 Think/depot.php

<?php
/**
 * 倉庫類
 */
namespace Think;

class depot {
    //發(fā)貨
    static function send($order){
        echo $order;
    }
}

自動加載類 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');

//查詢要買的商品
$product = \Think\products::getProduct('帽子');
//提交訂單
$orderTmp = \Think\orders::pushProduct($product);
//添加用戶信息
$user = \Think\user::setDate('wong');
//生成訂單
$order = \Think\orders::createOrder($user);
//倉庫發(fā)貨
$depot = \Think\depot::send($order);
print_r($depot);

輸出

用戶名為wong購買的商品帽子

使用外觀模式 外觀角色 Think/facade.php

<?php
/**
 * 外觀角色
 */
namespace Think;

class facade{
    static function shop($product,$name){
        //查詢要買的商品
        $product = products::getProduct($product);
        //提交訂單
        $orderTmp = orders::pushProduct($product);
        //添加用戶信息
        $user = user::setDate($name);
        //生成訂單
        $order = orders::createOrder($user);
        //倉庫發(fā)貨
        $depot = depot::send($order);
        return $depot;
    }
}

入口文件 index.php

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

$depot = \Think\facade::shop("褲子","wong");
print_r($depot);

輸出

用戶名為wong購買的商品褲子

應(yīng)用實例: 去醫(yī)院看病智厌,可能要去掛號、門診盲赊、劃價铣鹏、取藥,讓患者或患者家屬覺得很復(fù)雜哀蘑,如果有提供接待人員诚卸,只讓接待人員來處理葵第,就很方便。

優(yōu)點: 1合溺、減少系統(tǒng)相互依賴卒密。 2、提高靈活性辫愉。 3栅受、提高了安全性。

缺點:不符合開閉原則恭朗,如果要改東西很麻煩屏镊,繼承重寫都不合適。

使用場景: 1痰腮、為復(fù)雜的模塊或子系統(tǒng)提供外界訪問的模塊而芥。 2、子系統(tǒng)相對獨立膀值。 3棍丐、預(yù)防低水平人員帶來的風(fēng)險。

上一篇 php設(shè)計模式之代理模式
下一篇 php設(shè)計模式之橋接模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沧踏,一起剝皮案震驚了整個濱河市歌逢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翘狱,老刑警劉巖秘案,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異潦匈,居然都是意外死亡阱高,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門茬缩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赤惊,“玉大人,你說我怎么就攤上這事凰锡∥粗郏” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵寡夹,是天一觀的道長处面。 經(jīng)常有香客問我,道長菩掏,這世上最難降的妖魔是什么魂角? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮智绸,結(jié)果婚禮上野揪,老公的妹妹穿的比我還像新娘访忿。我一直安慰自己,他們只是感情好斯稳,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布海铆。 她就那樣靜靜地躺著,像睡著了一般挣惰。 火紅的嫁衣襯著肌膚如雪卧斟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天憎茂,我揣著相機(jī)與錄音珍语,去河邊找鬼。 笑死竖幔,一個胖子當(dāng)著我的面吹牛板乙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拳氢,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼募逞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了馋评?” 一聲冷哼從身側(cè)響起放接,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎留特,沒想到半個月后透乾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡磕秤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捧韵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片市咆。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖再来,靈堂內(nèi)的尸體忽然破棺而出蒙兰,到底是詐尸還是另有隱情,我是刑警寧澤芒篷,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布搜变,位于F島的核電站,受9級特大地震影響针炉,放射性物質(zhì)發(fā)生泄漏挠他。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一篡帕、第九天 我趴在偏房一處隱蔽的房頂上張望嘹承。 院中可真熱鬧竿音,春花似錦伸刃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茉唉。三九已至固蛾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間度陆,已是汗流浹背艾凯。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留坚芜,地道東北人览芳。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鸿竖,于是被迫代替她去往敵國和親沧竟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 工作 助理 21周工作內(nèi)容(0523-0529) 0523 周一(中午抵達(dá)昆明缚忧,準(zhǔn)備周四會議事宜) 報銷的發(fā)票已經(jīng)...
    喜歡艾薇兒和小甜甜閱讀 276評論 0 0
  • 這世界很大悟泵,我們很小,微乎其微闪水。在旅途中糕非,小小的我們遇到了同樣小小的他們,我們與他們之間有相同也有不同球榆,志趣相...
    溟濛夜雨閱讀 352評論 0 0
  • 女孩子護(hù)膚品瓶瓶罐罐那個多朽肥,水,精華液持钉,美容液衡招,霜,膏每强,隔離始腾,防曬......,再不愛打扮的女子空执,各種面膜也都是標(biāo)...
    60分媽媽Qing閱讀 175評論 1 0
  • 第五章終得一見 8浪箭、唐僧看瓷瓶兒與逐鹿君走遠(yuǎn),心里好不是滋味辨绊,但難以言表奶栖,便欲與上官雪e等作別,沒等上官雪e開口,...
    本無痕閱讀 337評論 27 26