3.5 Facade(外观)
【返回目錄】
外觀模式適用于系統內部有太多獨立的子系統,并且從用戶的角度來考慮又必須提供一致且相對簡單的接口的情景,因此我覺得用飛機來做一個形象的描述會比較合適,請不要把飛機想象的過于復雜(當然,想象得過于簡單也是錯誤的)。
飛機內部有眾多的子系統,假如你有機會進入飛機內部(不是指客艙)看看,你就會看到數不清的各種線路,這些線路連接著各種子系統,并且子系統之間的干擾并不多(否則飛機很容易失控),但是盡管飛行員是經歷了4年本科學習并且畢業后還時常參加各種實際飛行和訓練,如果飛機的設計師們覺得這樣的高智商人才一定可以很輕松地操作復雜的機器,那么飛機也就不再是最安全的交通工具了(拋開成見吧,這是事實)。
我們簡單羅列幾個子系統:動力系統、導航系統和無線電系統。比如動力系統,飛行員向前推動節流閥,飛機的引擎將加速工作并將飛機推上藍天;導航系統相當重要,否則飛機就成了瞎子一樣,飛行員可以通過GPS來獲知自己當前的飛行位置、高度和軌跡等;無線電系統也很重要,飛機的通訊就全靠它了(為了保障飛行安全,飛機上禁止點狼煙),很多時候飛行員都要借助ILS(Instrument Landing System,儀表著陸系統)來保證著陸的安全。但是,飛行員的培養側重于對飛機的駕駛技術而不是修理,飛行員通過無線電來接受機場ILS信號時并不非要搞清楚電子信號是從哪里接收到又經過哪些電子線路才到達駕駛艙的;飛行員向前推動節流閥的時候,也不是必須知道信號是通過哪些管道到達發動機并控制其轉速和油量才能使飛機加速的。飛機之所以安全,有很重要一部分功能是設計師們給飛行員提供了一套相對簡單、明了的操作界面。
1: using System; 2:? 3: namespace Autumoon.DesignPatterns.Facade 4: { 5: public class EngineSubSystem 6: { 7: public void Throttle() 8: { 9: Console.WriteLine("Throttle of Engine Sub System."); 10: } 11: } 12:? 13: public class NavigationSubSystem 14: { 15: public void GPS() 16: { 17: Console.WriteLine("GPS of Navigation Sub System."); 18: } 19: } 20:? 21: public class RadioSubSystem 22: { 23: public void ILS() 24: { 25: Console.WriteLine("ILS of Radio Sub System."); 26: } 27: } 28:? 29: public class FacadeDemo 30: { 31: public void Flight() 32: { 33: new EngineSubSystem().Throttle(); 34: new NavigationSubSystem().GPS(); 35: new RadioSubSystem().ILS(); 36: } 37: } 38: }其實經過一段時間的訓練,您也可以駕駛飛機的。
1: static void Main(string[] args) 2: { 3: #region Facade 4: new FacadeDemo().Flight(); 5: #endregion 6:? 7: Console.ReadLine(); 8: }轉載于:https://www.cnblogs.com/Autumoon/archive/2008/02/20/1074885.html
總結
以上是生活随笔為你收集整理的3.5 Facade(外观)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#3.0官方编码规范
- 下一篇: .NET Framework开源详细配置