国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
設(shè)計模式學習筆記(十一)——Facade外觀模式

Facade外觀模式,是一種結(jié)構(gòu)型模式,它主要解決的問題是:組件的客戶和組件中各種復雜的子系統(tǒng)有了過多的耦合,隨著外部客戶程序和各子系統(tǒng)的演化,這種過多的耦合面臨很多變化的挑戰(zhàn)。在這里我想舉一個例子:比如,現(xiàn)在有一輛汽車,我們(客戶程序)要啟動它,那我們就要發(fā)動引擎(子系統(tǒng)1),使四個車輪(子系統(tǒng)2)轉(zhuǎn)動。但是實際中我們并不需要用手推動車輪使其轉(zhuǎn)動,我們踩下油門,此時汽車再根據(jù)一些其他的操作使車輪轉(zhuǎn)動。油門就好比系統(tǒng)給我們留下的接口,不論汽車是以何種方式轉(zhuǎn)動車輪,車輪變化成什么牌子的,我們要開走汽車所要做的還是踩下油門。

GoF《設(shè)計模式》中說道:為子系統(tǒng)中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

Façade外觀模式的結(jié)構(gòu)大概是這樣的:

       這個圖是我對Facade模式的理解,如果大家覺得有什么不對的地方歡迎給我指出。

       我就上面說的那個情形寫一下實現(xiàn)代碼,首先我們要實現(xiàn)三個子系統(tǒng)(WheelEngine、Body):

       internal class Engine

    {

        public string EngineWork()

        {

            return "BMW‘s Engine is Working";

        }

 

        public string EngineStop()

        {

            return "BMW‘s Engine is stoped";

        }

    }

 

    internal class Wheel

    {

        public string WheelCircumrotate()

        {

            return "BMW‘s Wheel is Circumrotating";

        }

 

        public string WheelStop()

        {

            return "BMW‘s Wheel is stoped";

        }

    }

   

    internal class Body

    {

        public Wheel[] wheels = new Wheel[4];

        public Engine engine = new Engine();

        public Body()

        {

            for (int i = 0; i < wheels.Length; i++)

            {

                wheels[i] = new Wheel();

            }

        }

}

 

然后,我們再來實現(xiàn)汽車的Facade

class CarFacade

    {

        Body body = new Body();

 

        public void Run()

        {

            Console.WriteLine(body.engine.EngineWork());

            for(int i = 0; i < body.wheels.Length; i++)

            {

                Console.WriteLine(body.wheels[i].WheelCircumrotate());

            }

        }

 

        public void Stop()

        {

            Console.WriteLine(body.engine.EngineStop());

            for (int i = 0; i < body.wheels.Length; i++)

            {

                Console.WriteLine(body.wheels[i].WheelStop());

            }

        }

}

 

現(xiàn)在我們來使用客戶端程序驗證一下,代碼如下:

class Program

    {

        static void Main(string[] args)

        {

            CarFacade car = new CarFacade();

            car.Run();

            car.Stop();

            Console.Read();

        }

}

      

       執(zhí)行結(jié)果如下;

       BMW‘s Engine is Working

BMW‘s Wheel is Circumrotating

BMW‘s Wheel is Circumrotating

BMW‘s Wheel is Circumrotating

BMW‘s Wheel is Circumrotating

BMW‘s Engine is stoped

BMW‘s Wheel is stoped

BMW‘s Wheel is stoped

BMW‘s Wheel is stoped

BMW‘s Wheel is stoped

 

正如上面所說:客戶端代碼(Program)不需要關(guān)心子系統(tǒng),它只需要關(guān)心CarFacade所留下來的和外部交互的接口,而子系統(tǒng)是在CarFacade中聚合。

 

Façade模式的幾個要點:

       1、從客戶程序的角度看,Facade模式不僅簡化了整個組件系統(tǒng)的接口,同時對于組件內(nèi)部與外部客戶程序來說,從某種程度上也達到了一種“解耦”的效果——內(nèi)部子系統(tǒng)的任何變化不會影響到Facade接口的變化。

2、Facade設(shè)計模式更注重從架構(gòu)的層次去看整個系統(tǒng),而不是單個類的層次。Facade很多時候更是一種架構(gòu)設(shè)計模式。

posted on 2006-07-10 08:46 KiddLee 閱讀(2129) 評論(14)  編輯 收藏 引用 網(wǎng)摘 所屬分類: 設(shè)計模式

FeedBack:
# 
bu cuo  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-10 11:07 LED
hao  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-11 11:44 未傾城
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-11 16:43 大雁
不錯,只是ClientApp 和facadeClass之間應(yīng)該是箭頭而不是聚集符號  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-11 20:32 kid_li
@大雁
我不是很會畫UML圖,可不可以畫一張用Email(kid_li@126.com)發(fā)給我給我學習一下  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-12 17:47 同舟共濟
好東西  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-07-18 08:46 大雁
你的這種畫法,也是正確的,因為可以采用聚集的關(guān)聯(lián)來使用FacadeClass,但這種方式并不是唯一的。所以我認為簡單的調(diào)用關(guān)系可能更加普遍一些。  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2006-12-05 16:39 ww[匿名]
不錯,自己的理解。  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2007-03-03 13:52 snow_man2004
很好,謝謝!  回復  更多評論
  
# [Anytao.NET] 必須知道的設(shè)計模式[TrackBack] 2007-03-21 10:26 Anytao
發(fā)布日期:2007.3.21作者:Anytao  查看原文  回復  更多評論
  
# [導入][Anytao.NET] 必須知道的設(shè)計模式[TrackBack] 2007-04-07 16:31 Evily.Win
發(fā)布日期:2007.3.21作者:Anytao  查看原文  回復  更多評論
  
# [轉(zhuǎn)] 必須知道的設(shè)計模式 [TrackBack] 2007-05-05 13:56 酷咖啡
本文將介紹以下內(nèi)容:  查看原文  回復  更多評論
  
# [Anytao.NET] 必須知道的設(shè)計模式(轉(zhuǎn)載)[TrackBack] 2007-05-26 09:30 念時
[Anytao.NET]必須知道的設(shè)計模式  查看原文  回復  更多評論
  
# re: 設(shè)計模式學習筆記(十一)——Facade外觀模式  2007-07-19 23:18 dezwen
大致理解,以下是Sina播客里有關(guān)Facade外觀模式的視頻,大家一起參考:
http://you.video.sina.com.cn/b/4735243-1294306030.html  回復  更多評論
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深入理解JavaScript系列(30):設(shè)計模式之外觀模式
設(shè)計模式之Facade--外觀模式
設(shè)計模式——門面模式(Facade)
C#面向?qū)ο笤O(shè)計模式縱橫談:Facade 外觀模式
設(shè)計模式之外觀模式(門面模式)
Java 設(shè)計模式——外觀模式
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服