隨筆 - 2  文章 - 1  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          和我聯系

           和我聯系

          天氣


          站內搜索

          每日一句

          Dict.CN

          常用鏈接

          留言簿(1)

          隨筆檔案(2)

          文章檔案(1)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

                 Facade 即傳說中的外觀模式,在復雜的企業應用中,各子系統間的關系是很緊密的,為了降低子系統或模塊之間的耦合,可對復雜的業務邏輯進行組裝,對外就表現為一個統一的接口形式,提供一個調用入口,不管內部的邏輯如何變化,都不會影響到對外的表面形式,這就是它的基本的核心思想。
                關于Facade,這里有段更通俗的理解,感謝原創,呵呵。
                Facade外觀模式,是一種結構型模式,它主要解決的問題是:組件的客戶和組件中各種復雜的子系統有了過多的耦合,隨著外部客戶程序和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。在這里我想舉一個例子:比如,現在有一輛汽車,我們(客戶程序)要啟動它,那我們就要發動引擎(子系統1),使四個車輪(子系統2)轉動。但是實際中我們并不需要用手推動車輪使其轉動,我們踩下油門,此時汽車再根據一些其他的操作使車輪轉動。油門就好比系統給我們留下的接口,不論汽車是以何種方式轉動車輪,車輪變化成什么牌子的,我們要開走汽車所要做的還是踩下油門。
                GoF《設計模式》中說道:為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

          以下為簡單的代碼實現,首先我們要實現三個子系統(WheelEngineBody):

                 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();

                      }

                  }

          }

           

          然后,我們再來實現汽車的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());

                      }

                  }

          }

           

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

          class Program

              {

                  static void Main(string[] args)

                  {

                      CarFacade car = new CarFacade();

                      car.Run();

                      car.Stop();

                      Console.Read();

                  }

          }

                

                 執行結果如下;

             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)不需要關心子系統,它只需要關心CarFacade所留下來的和外部交互的接口,而子系統是在CarFacade中聚合。

           

          Façade模式的幾個要點:

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

          2Facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。Facade很多時候更是一種架構設計模式。


              

          posted on 2009-06-18 12:26 JINBO~~ 閱讀(278) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 报价| 纳雍县| 通化市| 昌邑市| 宁远县| 弥渡县| 巴里| 石棉县| 和林格尔县| 永登县| 沽源县| 连山| 南宫市| 杨浦区| 东至县| 内乡县| 张家港市| 绥滨县| 莎车县| 山阳县| 屏山县| 双城市| 同德县| 新乡县| 邯郸县| 名山县| 海林市| 冕宁县| 尚志市| 资兴市| 陕西省| 岑巩县| 兰坪| 正阳县| 万州区| 临潭县| 平顺县| 林甸县| 新民市| 固阳县| 天气|