日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口

發布時間:2024/4/11 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 案例:自動駕駛飛機
  • 外觀模式
  • 總結
  • 完整代碼與文檔


案例:自動駕駛飛機

隨著自動駕駛汽車的大賣,特X拉開始把目標轉向飛行領域,打算開發出一款能夠完全自動行駛的飛機,系統初步的設計如下

我們將所有系統的控制封裝為方法提供給客戶


客戶只需要按照上面的步驟啟動即可

但是,這樣的設計存在著嚴重的問題

  • 存在著大量的方法,用戶存在學習成本
  • 各個系統之間存在強耦合關系,例如我們不可能在沒有能源的情況下啟動導航和發動引擎
  • 當需要關閉系統時,又要按照另一種關閉順序進行關閉
  • 當系統更新換代時,用戶又需要學習另一套操作過程

上面的設計談得上智能嗎?自動駕駛飛機的本意就是要降低使用門檻,因此我們不應該把這些底層的方法開放給客戶,而是我們自己將其封裝為一套合理的、方便使用的上層方法,用戶只需要一鍵,就能夠完成這些任務,這就是外觀模式


外觀模式

外觀模式為子系統中的一組接口提供一個一致(穩定)的界面,Fa?ade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用(復用)。

外觀模式由兩部分組成

  • Facade(外觀):負責將子系統中的接口整合為一個高層接口,供客戶使用。外觀中組合了子系統,并將任務委托給子系統處理
  • SubSystem(子系統):即系統的各個組件

類圖如下

了解了外觀模式后,設計師重新規劃了設計圖,新的設計如下

設計師將所有系統的啟動、關閉方法封裝成為一個上層的方法,這樣用戶就不再需要關系其中的細節以及依賴關系,只需要調用這一個方法即可。不僅簡化了接口,還將客戶從組件的子系統中解耦

下面開始代碼的實現,首先給出幾個子系統的代碼,為了方便演示子系統內容基本一樣

class EngineSystem { public:void systemOn(){std::cout << "啟動能源系統" << std::endl;}void systemOff(){std::cout << "關閉能源系統" << std::endl;} };class DynamicSystem { public:void systemOn(){std::cout << "啟動動力系統" << std::endl;}void systemOff(){std::cout << "關閉動力系統" << std::endl;} }; class CoolingSystem { public:void systemOn(){std::cout << "啟動冷卻系統" << std::endl;}void systemOff(){std::cout << "關閉冷卻系統" << std::endl;} };class NavigationSystem { public:void systemOn(){st-d::cout << "啟動導航系統" << std::endl;}void systemOff(){std::cout << "關閉導航系統" << std::endl;} };

接著我們將所有子系統的啟動和關閉,按照他們之間的依賴關系封裝為一個統一的啟動、關閉方法,開放給上層

class AutoAircraft { public:AutoAircraft(): _cooling(new CoolingSystem), _dynamic(new DynamicSystem), _engine(new EngineSystem), _navigaton(new NavigationSystem){}~AutoAircraft(){delete _cooling, _dynamic, _engine, _navigaton;}//統一啟動接口void systemOn(){_engine->systemOn();_cooling->systemOn();_dynamic->systemOn();_navigaton->systemOn();}//統一關閉接口void systemOff(){_navigaton->systemOff();_dynamic->systemOff();_cooling->systemOff();_engine->systemOff();}private:CoolingSystem* _cooling;DynamicSystem* _dynamic;EngineSystem* _engine;NavigationSystem* _navigaton; };

測試代碼

int main() {AutoAircraft airCraft;airCraft.systemOn();cout << endl;airCraft.systemOff();return 0; }


在新的設計中,用戶只需要執行開啟和關閉,就能完成整個系統的開關,大大降低了操作的門檻,也避免了因為子系統互相依賴而發生的錯誤


總結

要點

  • 外觀模式將客戶從一個復雜的子系統中解耦,簡化了用戶操作
  • 通常用于簡化或者統一一群復雜的接口,減少系統相互依賴
  • 需要將子系統組合進外觀中,并且外觀將工作委托給子系統,這就導致了不符合開放封閉原則,修改和拓展都有點麻煩

應用場景

  • 當客戶端不需要知道系統內部的復雜聯系時,為復雜的模塊或子系統封裝一個供外界訪問的入口
  • 將多個低粒度接口整合為高粒度接口,減少通信成本,通常用于網絡通信

完整代碼與文檔

如果有需要完整代碼或者markdown文檔的同學可以點擊下面的github鏈接
github

總結

以上是生活随笔為你收集整理的趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。