亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

我所理解的設計模式(C++實現)——外觀模式(F

系統 3175 0

概述

想想我們小時候玩的四驅車,里面的構造很復雜,馬達,舵機,電池組等等,而我們控制它卻非常簡單,只要打開電池開關,他就可以跑。我們其實不用知道它里面是如何工作,只要知道撥動開關它就可以工作就行了,這個開關其實就四驅車給我們的一個友好的組件,使得我們可以很方便的控制它。

外觀模式其實定義了一個高層接口,該接口為子系統中的一組接口提供一個一致的界面,使得這一子系統更加容易使用。

類圖和樣例



在這個對象圖中,出現了兩個角色:

外觀( Facade ) 角色 :客戶端可以調用這個角色的方法。此角色知曉相關的 ( 一個或者多個 ) 子系統的功能和責任。在正常情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去。

子系統 (subsystem) 角色 :可以同時有一個或者多個子系統。每一個子系統都不是一個單獨的類,而是一個類的集合。每一個子系統都可以被客戶端直接調用,或者被外觀角色調用。子系統并不知道外觀的存在,對于子系統而言,外觀僅僅是另外一個客戶端而已。

    #include<iostream>
using namespace std;
class Scanner  
{  
public:  
	void Scan() { cout<<"詞法分析"<<endl; }  
};  
class Parser  
{  
public:  
	void Parse() { cout<<"語法分析"<<endl; }  
};  
class GenMidCode  
{  
public:  
	void GenCode() { cout<<"產生中間代碼"<<endl; }  
};  
class GenMachineCode  
{  
public:  
	void GenCode() { cout<<"產生機器碼"<<endl;}  
};  
//高層接口  Fecade
class Compiler  
{  
public:  
	void Run()   
	{  
		Scanner scanner;  
		Parser parser;  
		GenMidCode genMidCode;  
		GenMachineCode genMacCode;  
		scanner.Scan();  
		parser.Parse();  
		genMidCode.GenCode();  
		genMacCode.GenCode();  
	}  
};  

//client
int main()  
{  
	Compiler compiler;  
	compiler.Run();  
	return 0;  
}  
  

要點

1 Facade 模式對客戶屏蔽了子系統組件,因而減少了客戶處理的對象的數目并使得子系統使用起來更加方便。

2 Facade 模式實現了子系統與客戶之間的松耦合關系,而子系統內部的功能組件往往是緊耦合的。松耦合關系使得子系統的組件變化不會影響到它的客戶。

3 .如果應用需要,它并不限制它們使用子系統類。因此你可以在系統易用性與通用性之間選擇。

4.在外觀模式中,通常只需要一個外觀類,并且此外觀類只有一個實例,換言之它是一個單例類。當然這并不意味著在整個系統里只能有一個外觀類,而僅僅是說對每一個子系統只有一個外觀類?;蛘哒f,如果一個系統有好幾個子系統的話,每一個子系統有一個外觀類,整個系統可以有數個外觀類。

5. 外觀 模式的用意是為子系統提供一個集中化和簡化的溝通管道,而不建議向子系統加入新的行為。

6.外觀模式注重的是簡化接口,它更多的時候是從架構的層次去看整個系統,而并非單個類的層次。

適用性和優缺點

適用性

1 .為一個復雜子系統提供一個簡單接口。

2 .提高子系統的獨立性。

3 .在層次化結構中,可以使用 Facade 模式定義系統中每一層的入口。

優點

1. 松散耦合
外觀模式松散了客戶端與子系統的耦合關系,讓子系統內部的模塊能更容易擴展和維護。即要點2.

2. 簡單易用
外觀模式讓子系統更加易用,客戶端不再需要了解子系統內部的實現,也不需要跟眾多子系統內部的模塊進行交互,只需要跟外觀交互就可以了,相當于外觀類為外部客戶端使用子系統提供了一站式服務。

3. 更好的劃分訪問層次
通過合理使用 Facade ,可以幫助我們更好的劃分訪問的層次。有些方法是對系統外的,有些方法是系統內部使用的。把需要暴露給外部的功能集中到外觀中,這樣既方便客戶端使用,也很好的隱藏了內部的細節。

缺點

過多的或者是不太合理的 Facade 也容易讓人迷惑,到底是調用 Facade 好呢,還是直接調用模塊好。


LCL_data原創于CSDN.NET【 http://blog.csdn.net/lcl_data/article/details/8841779


我所理解的設計模式(C++實現)——外觀模式(Facade Pattern)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品久久久久福利网站 | 欧美色欧美亚洲高清在线视频 | 美女一级毛片免费观看 | 免费国产精品视频 | 亚洲精品国产第一区二区尤物 | 精品国产免费久久久久久婷婷 | 在线免费黄色网址 | 久久久久久不卡 | 日韩免费高清一级毛片在线 | 18禁片一级毛片视频播放免费看 | 免费成人毛片 | 欧洲一级毛片免费 | 欧美一级www片免费观看 | 羞羞的视频在线免费观看 | 乱人伦视频69 | 在线成人欧美 | 99精品欧美一区二区三区 | 日韩经典欧美精品一区 | 人人爽天天碰天天躁夜夜躁 | 国产操女人 | 亚洲国产人成在线观看69网站 | 久久精品夜色国产 | 岛国三级视频 | 久久久毛片免费全部播放 | 日本夜夜夜 | 人人澡人人干 | 日韩中文字幕在线 | 夜夜欢视频 | 久久www免费人成_看片高清 | 亚州久久 | 天天爽天天碰狠狠添 | 成年女人午夜毛片免费看 | 色婷婷婷丁香亚洲综合不卡 | 久久99热久久精品在线6 | 精品久久久久久久久久久久久久久 | 国产精品视频成人 | 欧洲一级黄色片 | 91视频最新地址 | 99香蕉国产精品偷在线观看 | 欧美成人香蕉网在线观看 | 天天操天天干天天做 |