国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#設計模式之外觀

2019-11-17 03:10:25
字體:
來源:轉載
供稿:網友

C#設計模式之外觀

IronMan之外觀

接著上篇觀察者內容的“劇情”,沒看過的朋友也沒關系,篇幅之間有銜接的關系但是影響不大。

需求:

為"兵工廠"提供各種支持,生產了各式各樣的"IronMan",因為"IronMan"是智能的,它有一個"總控中心",用來使用各個部件的功能,以及 其它功能的使用。"總控中心"也是用戶在穿戴時顯示在用戶眼前的UI。

現在遇到一個問題,大家都來看一下,"IronMan"在穿戴好啟動的時候,"總控"會讓"IronMan"各個部件自動自檢,自檢完成后要在UI那顯示出 自檢的結果,當然自檢的順序可以是固定的也可以是不固定的,隨便怎么檢查,最終是要返回所有的部件自檢結果。

假設的基礎結構情況:

 1     public class Component1 2     { 3         public void Component1Inspection() 4         { 5             //部件1自檢 6         } 7     } 8     public class Component2 9     {10         public void Component2Inspection()11         {12             //部件2自檢13         }14     }15     public class Component316     {17         public void Component3Inspection()18         {19             //部件3自檢20         }21     }

假設還有若干個部件,按照平常的狀態它們都要一一的自檢。在這樣的情況下使用的代碼則是這樣的:

 1     /// <summary> 2     /// 控制中心 3     /// </summary> 4     public class CenterController 5     { 6         /// <summary> 7         /// 啟動時的行為 8         /// </summary> 9         public void StartBef()10         {11             Component1 com1 = new Component1();12             com1.Component1Inspection();13             Component2 com2 = new Component2();14             com2.Component2Inspection();15             Component3 com3 = new Component3();16             com3.Component3Inspection();17         }18     }

這樣做下去的話是不是很費事,而且控制中心和部件的耦合度也比較大,如果部件個數自檢的修改也會牽扯到控制中心內部的修改,這樣的行為是違反設計原則的。

外觀模式(Facade)的定義:為子系統中的一組接口提供一個一致的界面,用來訪問子系統中的一群接口。

根據設計模式的中心思想來做修改,把部件自檢的操作都封裝在單獨的一層中,讓控制中心和部件解耦,我們來看一下修改后的代碼:

 1     public class Facade 2     { 3         //自檢 4         public void Inspection() 5         { 6             Component1 com1 = new Component1(); 7             com1.Component1Inspection(); 8             Component2 com2 = new Component2(); 9             com2.Component2Inspection();10             Component3 com3 = new Component3();11             com3.Component3Inspection();12         }13     }

這樣定義了外觀類過后,再來看一下控制中心的調用修改:

 1     /// <summary> 2     /// 控制中心 3     /// </summary> 4     public class CenterController 5     { 6         /// <summary> 7         /// 啟動時的行為 8         /// </summary> 9         public void StartBef()10         {11             Facade facade = new Facade();12             facade.Inspection();13         }14     }

在兩層中間加入了Facade這一層,耦合的問題就迎刃而解,好像好多解耦的方式都是這樣的。

END 下一篇是關于命令模式的說明。

作者:金源

出處:http://m.survivalescaperooms.com/jin-yuan/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面


上一篇:c# 委托詳解

下一篇:代碼Review發現問題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长葛市| 新河县| 南昌市| 黄冈市| 新安县| 哈尔滨市| 山东省| 安吉县| 封开县| 丰台区| 河曲县| 台江县| 巩留县| 湟中县| 申扎县| 蒙山县| 隆昌县| 余姚市| 游戏| 洛扎县| 容城县| 肇东市| 华池县| 金山区| 古蔺县| 中超| 台南县| 蒙城县| 昆明市| 潮州市| 文成县| 太保市| 麻江县| 大渡口区| 弥勒县| 松阳县| 牟定县| 田阳县| 化州市| 卓尼县| 绵竹市|