欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PHP設計模式(九)外觀模式Facade實例詳解【結構型】

PHP設計模式(九)外觀模式Facade實例詳解【結構型】

熱門標簽:邢臺400電話辦理 嘟嘟云外呼系統(tǒng) 正規(guī)電銷機器人系統(tǒng) 濟源百應電銷機器人聯(lián)系方式 南京3D地圖標注 南寧電話外呼系統(tǒng)線路 重慶外呼電銷系統(tǒng)多少錢 辦理400電話哪家好點 咸陽電銷

本文實例講述了PHP設計模式:外觀模式Facade。分享給大家供大家參考,具體如下:

1. 概述

     外觀模式,我們通過外觀的包裝,使應用程序只能看到外觀對象,而不會看到具體的細節(jié)對象,這樣無疑會降低應用程序的復雜度,并且提高了程序的可維護性。
例子1:一個電源總開關可以控制四盞燈、一個風扇、一臺空調和一臺電視機的啟動和關閉。該電源總開關可以同時控制上述所有電器設備,電源總開關即為該系統(tǒng)的外觀模式設計。

2. 問題

為了降低復雜性,常常將系統(tǒng)劃分為若干個子系統(tǒng)。但是如何做到各個系統(tǒng)之間的通信和相互依賴關系達到最小呢?

3. 解決方案

外觀模式:為子系統(tǒng)中的一組接口提供一個一致的界面, Facade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。引入外觀角色之后,用戶只需要直接與外觀角色交互,用戶與子系統(tǒng)之間的復雜關系由外觀角色來實現(xiàn),從而降低了系統(tǒng)的耦合度。


4. 適用性

在遇到以下情況使用facade模式:
    1) 當你要為一個復雜子系統(tǒng)提供一個簡單接口時。子系統(tǒng)往往因為不斷演化而變得越來越復雜。大多數(shù)模式使用時都會產生更多更小的類。
    這使得子系統(tǒng)更具可重用性,也更容易對子系統(tǒng)進行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。facade可以提供一個簡單的缺省視圖,
    這一視圖對大多數(shù)用戶來說已經足夠,而那些需要更多的可定制性的用戶可以越過facade層。
    2) 客戶程序與抽象類的實現(xiàn)部分之間存在著很大的依賴性。引入 facade將這個子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨立性 和可移植性。
    3) 當你需要構建一個層次結構的子系統(tǒng)時,使用 facade模式定義子系統(tǒng)中每層的入口點。如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過facade進行通訊,從而簡化了它們之間的依賴關系。

5. 結構


6.構建模式的組成

外觀角色(Facade):是模式的核心,他被客戶client角色調用,知道各個子系統(tǒng)的功能。同時根據客戶角色已有的需求預訂了幾種功能組合\
子系統(tǒng)角色(Subsystem classes):實現(xiàn)子系統(tǒng)的功能,并處理由Facade對象指派的任務。對子系統(tǒng)而言,facade和client角色是未知的,沒有Facade的任何相關信息;即沒有指向Facade的實例。
客戶角色(client):調用facade角色獲得完成相應的功能。

7. 效果

Facade模式有下面一些優(yōu)點:

1)對客戶屏蔽子系統(tǒng)組件,減少了客戶處理的對象數(shù)目并使得子系統(tǒng)使用起來更加容易。通過引入外觀模式,客戶代碼將變得很簡單,與之關聯(lián)的對象也很少。
2)實現(xiàn)了子系統(tǒng)與客戶之間的松耦合關系,這使得子系統(tǒng)的組件變化不會影響到調用它的客戶類,只需要調整外觀類即可。
3)降低了大型軟件系統(tǒng)中的編譯依賴性,并簡化了系統(tǒng)在不同平臺之間的移植過程,因為編譯一個子系統(tǒng)一般不需要編譯所有其他的子系統(tǒng)。一個子系統(tǒng)的修改對其他子系統(tǒng)沒有任何影響,而且子系統(tǒng)內部變化也不會影響到外觀對象。
4)只是提供了一個訪問子系統(tǒng)的統(tǒng)一入口,并不影響用戶直接使用子系統(tǒng)類。
Facade模式的缺點
1) 不能很好地限制客戶使用子系統(tǒng)類,如果對客戶訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活性。
2) 在不引入抽象外觀類的情況下,增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。

8. 實現(xiàn)

我們使用開關的例子;

?php 
/**
 * 外觀模式
 *
 */
 class SwitchFacade
{
	private $_light 	= null;	 	//電燈
	private $_ac	 	= null;		//空調
	private $_fan	 	= null;		//電扇
	private $_tv	 	= null;		//電視
	
	public function __construct()
	{
		$this->_light = new Light();
		$this->_fan = new Fan();
		$this->_ac = new AirConditioner();
		$this->_tv = new Television();
	}
	/**
	 * 晚上開電燈
	 *
	 */
	public function method1($isOpen =1) {
		if ($isOpen == 1) {
			$this->_light->on();
			$this->_fan->on();
			$this->_ac->on();
			$this->_tv->on();
		}else{
			$this->_light->off();
			$this->_fan->off();
			$this->_ac->off();
			$this->_tv->off();
		}
 
	}
	/**
	 * 白天不需要電燈
	 *
	 */
	public function method2() {
		if ($isOpen == 1) {
			$this->_fan->on();
			$this->_ac->on();
			$this->_tv->on();
		}else{
			$this->_fan->off();
			$this->_ac->off();
			$this->_tv->off();
		}
	}
}
 
/******************************************子系統(tǒng)類 ************/
/**
 * 
*/ 
class Light
{	
	private $_isOpen = 0;
	public function on() {
		echo 'Light is open', 'br/>';
		$this->_isOpen = 1; 
	}
	public function off() {
		echo 'Light is off', 'br/>';
		$this->_isOpen = 0;
	}
}
 
class Fan
{
	private $_isOpen = 0;
	public function on() {
		echo 'Fan is open', 'br/>';
		$this->_isOpen = 1; 
	}
	public function off() {
		echo 'Fan is off', 'br/>';
		$this->_isOpen = 0;
	}
}
 
class AirConditioner
{
	private $_isOpen = 0;
	public function on() {
		echo 'AirConditioner is open', 'br/>';
		$this->_isOpen = 1; 
	}
	public function off() {
		echo 'AirConditioner is off', 'br/>';
		$this->_isOpen = 0;
	}
}
class Television
{
	private $_isOpen = 0;
	public function on() {
		echo 'Television is open', 'br/>';
		$this->_isOpen = 1; 
	}
	public function off() {
		echo 'Television is off', 'br/>';
		$this->_isOpen = 0;
	}
}
/**
 * 客戶類
 *
 */
class client {
	static function open() {
		$f = new SwitchFacade();
		$f->method1(1);
	}
 
	static function close() {
		$f = new SwitchFacade();
		$f->method1(0);
	}
}
client::open();

11. 與其他相關模式

    1)抽象工廠模式:Abstract Factory式可以與Facade模式一起使用以提供一個接口,這一接口可用來以一種子系統(tǒng)獨立的方式創(chuàng)建子系統(tǒng)對象。 Abstract Factory也可以代替Facade模式隱藏那些與平臺相關的類。
    2)中介模式:Mediator模式與Facade模式的相似之處是,它抽象了一些已有的類的功能。然而,Mediator的目的是對同事之間的任意通訊進行抽象,通常集中不屬于任何單個對象的功能。
    Mediator的同事對象知道中介者并與它通信,而不是直接與其他同類對象通信。相對而言,F(xiàn)acade模式僅對子系統(tǒng)對象的接口進行抽象,從而使它們更容易使用;它并不定義新功能,子系統(tǒng)也不知道Facade的存在。
    通常來講,僅需要一個Facade對象,因此Facade對象通常屬于Singleton模式。
    3)Adapter模式
    適配器模式是將一個接口通過適配來間接轉換為另一個接口。
    外觀模式的話,其主要是提供一個整潔的一致的接口給客戶端。

12. 總結

1)根據“單一職責原則”,在軟件中將一個系統(tǒng)劃分為若干個子系統(tǒng)有利于降低整個系統(tǒng)的復雜性,一個常見的設計目標是使子系統(tǒng)間的通信和相互依賴關系達到最小,而達到該目標的途徑之一就是引入一個外觀對象,它為子系統(tǒng)的訪問提供了一個簡單而單一的入口。

2)外觀模式也是“迪米特法則”的體現(xiàn)通過引入一個新的外觀類可以降低原有系統(tǒng)的復雜度,外觀類充當了客戶類與子系統(tǒng)類之間的“第三者”,同時降低客戶類與子系統(tǒng)類的耦合度。外觀模式就是實現(xiàn)代碼重構以便達到“迪米特法則”要求的一個強有力的武器。

3)外觀模式要求一個子系統(tǒng)的外部與其內部的通信通過一個統(tǒng)一的外觀對象進行,外觀類將客戶端與子系統(tǒng)的內部復雜性分隔開,使得客戶端只需要與外觀對象打交道,而不需要與子系統(tǒng)內部的很多對象打交道。 4)外觀模式從很大程度上提高了客戶端使用的便捷性,使得客戶端無須關心子系統(tǒng)的工作細節(jié),通過外觀角色即可調用相關功能。 5)不要試圖通過外觀類為子系統(tǒng)增加新行為 ,不要通過繼承一個外觀類在子系統(tǒng)中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統(tǒng)提供一個集中化和簡化的溝通渠道,而不是向子系統(tǒng)加入新的行為,新的行為的增加應該通過修改原有子系統(tǒng)類或增加新的子系統(tǒng)類來實現(xiàn),不能通過外觀類來實現(xiàn)。

13.模式擴展

一個系統(tǒng)有多個外觀類:
         在外觀模式中,通常只需要一個外觀類,并且此外觀類只有一個實例,換言之它是一個單例類在很多情況下為了節(jié)約系統(tǒng)資源,一般將外觀類設計為單例類。當然這并不意味著在整個系統(tǒng)里只能有一個外觀類,在一個系統(tǒng)中可以設計多個外觀類,每個外觀類都負責和一些特定的子系統(tǒng)交互,向用戶提供相應的業(yè)務功能。
不要試圖通過外觀類為子系統(tǒng)增加新行為:
        不要通過繼承一個外觀類在子系統(tǒng)中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統(tǒng)提供一個集中化和簡化的溝通渠道,而不是向子系統(tǒng)加入新的行為,新的行為的增加應該通過修改原有子系統(tǒng)類或增加新的子系統(tǒng)類來實現(xiàn),不能通過外觀類來實現(xiàn)。
外觀模式與迪米特法則:
        外觀模式創(chuàng)造出一個外觀對象,將客戶端所涉及的屬于一個子系統(tǒng)的協(xié)作伙伴的數(shù)量減到最少,使得客戶端與子系統(tǒng)內部的對象的相互作用被外觀對象所取代。外觀類充當了客戶類與子系統(tǒng)類之間的“第三者”,降低了客戶類與子系統(tǒng)類之間的耦合度,外觀模式就是實現(xiàn)代碼重構以便達到“迪米特法則”要求的一個強有力的武器。
抽象外觀類的引入:
外觀模式最大的缺點在于違背了“開閉原則”,當增加新的子系統(tǒng)或者移除子系統(tǒng)時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行編程。對于新的業(yè)務需求,不修改原有外觀類,而對應增加一個新的具體外觀類,由新的具體外觀類來關聯(lián)新的子系統(tǒng)對象,同時通過修改配置文件來達到不修改源代碼并更換外觀類的目的。 

UML:


更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數(shù)據庫操作入門教程》及《php常見數(shù)據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP設計模式之外觀模式(Facade)入門與應用詳解
  • thinkphp5.1框架中容器(Container)和門面(Facade)的實現(xiàn)方法分析
  • 詳解PHP中的外觀模式facade pattern
  • 學習php設計模式 php實現(xiàn)門面模式(Facade)
  • php設計模式 Facade(外觀模式)
  • PHP設計模式之PHP迭代器模式講解
  • PHP設計模式之工廠模式(Factory Pattern)的講解
  • 淺談PHP設計模式之門面模式Facade

標簽:河南 黃山 唐山 南通 隴南 平頂山 通遼 武漢

巨人網絡通訊聲明:本文標題《PHP設計模式(九)外觀模式Facade實例詳解【結構型】》,本文關鍵詞  PHP,設計模式,九,外觀,模式,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式(九)外觀模式Facade實例詳解【結構型】》相關的同類信息!
  • 本頁收集關于PHP設計模式(九)外觀模式Facade實例詳解【結構型】的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产精品入口麻豆原神| 成人小视频免费观看| 日韩综合第一页| 欧美色倩网站大全免费| 中文字幕中文字幕在线一区 | 中文字幕欧美日本乱码一线二线| 日韩国产欧美在线观看| 无码国产精品一区二区免费式直播 | 久久久亚洲高清| 免费人成精品欧美精品| 亚洲一区二区三区综合| 91精品黄色片免费大全| 日韩在线播放一区二区| 玖草视频在线观看| 精品捆绑美女sm三区| 青青国产91久久久久久| 欧美亚一区二区三区| 欧美mv和日韩mv的网站| 久久se精品一区精品二区| 国产人妻大战黑人20p| 久久这里只有精品首页| 国产原创一区二区| 欧美h片在线观看| 日韩美女视频19| 无套白嫩进入乌克兰美女| 欧美日韩一区久久| 五月天欧美精品| 在哪里可以看毛片| 久久精品日韩一区二区三区| 国产一区二区电影| 色综合一个色综合| 亚洲国产综合在线| 欧美bbbbb性bbbbb视频| 26uuuu精品一区二区| 国产精品一级二级三级| 国产一区二区播放| 亚洲一区二区视频在线观看| 中文在线资源观看网站视频免费不卡| 色婷婷亚洲精品| 尤物av一区二区| 手机在线看片日韩| 久久久久久久国产精品影院| 国产不卡在线播放| 在线观看视频一区二区欧美日韩| 亚洲图片欧美色图| 免费看污片的网站| 亚洲欧美在线观看| 中文字幕 日本| 国产清纯美女被跳蛋高潮一区二区久久w| 国产99一区视频免费| 精品视频一区二区三区免费| 青青草成人在线观看| 国产黄a三级三级| 亚洲一区电影777| 性猛交ⅹxxx富婆video| 国产精品乱子久久久久| www.黄色网| 国产区在线观看成人精品| 99精品热视频| 欧美精品一区二区久久婷婷 | 激情综合色综合久久| 可以直接看的黄色网址| 婷婷成人激情在线网| 潮喷失禁大喷水aⅴ无码| 一区二区欧美在线观看| 免费看黄色的视频| 亚洲欧美激情插| 日本成人午夜影院| 亚洲一区二区三区视频在线播放| 最近中文字幕免费视频| 亚洲精品国产第一综合99久久 | 午夜免费激情视频| 日韩在线播放一区二区| www日韩在线| 免费在线视频一区| 在线一区二区视频| 国产综合色产在线精品| 欧美日韩一级二级| 成人一区二区三区在线观看| 欧美一区二区福利视频| 成人av网站在线| 26uuu成人网一区二区三区| 国产ts在线观看| 国产精品麻豆久久久| 成人免费av片| 亚洲一区二三区| 免费看特级毛片| 久久精品久久精品| 欧美日韩情趣电影| 不卡的av中国片| 国产亚洲欧美日韩日本| 深田咏美中文字幕| 亚洲精品成人少妇| 色欲人妻综合网| 韩国一区二区三区| 欧美一区二区视频在线观看 | 久久久久9999亚洲精品| 伦理片一区二区| 亚洲精品ww久久久久久p站| 91香蕉国产视频| 捆绑紧缚一区二区三区视频 | 91极品美女在线| 国产福利精品导航| 精品精品国产高清一毛片一天堂| 亚洲熟妇一区二区| 伊人夜夜躁av伊人久久| 免费中文字幕日韩| 国产一区二区三区黄视频 | 26uuu精品一区二区三区四区在线| 91一区二区在线观看| 欧美国产日韩在线观看| 国产综合精品在线| 日本一不卡视频| 在线成人小视频| 日本wwww色| 一个色综合av| 91成人免费在线视频| 成人免费视频免费观看| 国产女人aaa级久久久级 | 魔女鞋交玉足榨精调教| 午夜激情久久久| 欧美久久婷婷综合色| 4438x全国最大成人| 亚洲人午夜精品天堂一二香蕉| 午夜剧场免费在线观看| 国产精品1024| 亚洲国产高清在线| 日韩在线观看免| 高清av一区二区| 国产精品福利影院| 国产高清在线免费观看| 成年人国产精品| 国产精品久久久久久户外露出| 久久久精品成人| 国产成人精品一区二区三区网站观看| 久久精品亚洲麻豆av一区二区| 国产精品久久久久久久av| 精东粉嫩av免费一区二区三区| 久久久国产精华| 婷婷久久综合网| 91偷拍与自偷拍精品| 一区二区三区在线免费视频| 欧美做爰猛烈大尺度电影无法无天| 北岛玲一区二区三区四区| 亚洲精选在线视频| 欧美丰满高潮xxxx喷水动漫| 182在线视频| 精品一区二区三区欧美| 国产视频911| 色婷婷综合视频在线观看| 91香蕉视频污| 日日摸夜夜添夜夜添国产精品| 欧美大片在线观看一区| 国产毛片欧美毛片久久久| 国产精品小仙女| 亚洲图片你懂的| 制服丝袜一区二区三区| 一本色道久久综合亚洲精品图片| 极品少妇一区二区| 国产精品久久久久影院色老大| 日本高清不卡视频| 欧美激情 一区| 成人性色生活片免费看爆迷你毛片| 亚洲欧美另类图片小说| 欧美老女人在线| 蜜乳av中文字幕| jizz一区二区| 日本系列欧美系列| 国产精品区一区二区三区| 在线观看不卡视频| 亚洲永久精品ww.7491进入| 国产精品2024| 亚洲国产裸拍裸体视频在线观看乱了 | 国产成人鲁色资源国产91色综| 伊人开心综合网| 亚洲精品在线电影| 五月天丁香激情| aaaaa级少妇高潮大片免费看| 国产成人精品免费在线| 亚洲一二三区在线观看| 久久婷婷成人综合色| 91激情在线视频| 久久久久久国产免费a片| 91日韩一区二区三区| 麻豆免费看一区二区三区| 中文字幕在线免费不卡| 欧美一区二区视频在线观看2022| 少妇高潮在线观看| 少妇一级淫免费观看| 懂色av一区二区三区免费观看| 午夜不卡av免费| 国产精品视频观看| 91精品黄色片免费大全| 欧美成人777| 熟女俱乐部一区二区| 91免费看`日韩一区二区| 精品一区二区三区影院在线午夜| 亚洲精品欧美专区| 国产视频在线观看一区二区三区| 欧美日韩国产大片|