設計模式學習筆記(一)--Facade外觀模式

          Posted on 2007-11-23 01:45 flustar 閱讀(2840) 評論(1)  編輯  收藏 所屬分類: Design Patterns
                  GOF《設計模式》一書對Facade模式是這樣描述的:

                 為子系統(tǒng)中的一組接口提供一個統(tǒng)一接口。Facade模式定義了一個更高層的接口,使子系統(tǒng)更加容易使用。

                 大致意思是說:使用一種比原有方式更簡單的辦法與系統(tǒng)交互。例如,我們把一個很文件的文件,放在了第二抽屜里,而第二個抽屜的鑰匙放在了第一個抽屜里,我們要想取出這個文件,第一步肯定要拿到第一個抽屜的鑰匙,然后打開它再拿出第二個抽屜的鑰匙,最后打開第二個抽屜取出文件。

                 我就上面說的那個情形寫一下實現(xiàn)代碼,首先我們要實現(xiàn)二個子系統(tǒng),呵呵,把抽屜比喻成系統(tǒng),有點夸張了(DrawerOne、DrawerTwo):

          class DrawerOne {

              public void open(){

                 System.out.println("第一個抽屜被打開了");

                 getKey();

              }

              public void getKey(){

                 System.out.println("得到第二個抽屜的鑰匙");

              }

          }

          class DrawerTwo{

              public void open(){

                 System.out.println("第二個抽屜被打開了");

                 getFile();

              }

              public void getFile(){

                 System.out.println("得到這個重要文件");

              }

          }

          public class Client{

              public static void main(String []args){

                 DrawerOne darwerOne=new DrawerOne();

                 DrawerTwo darwerTwo=new DrawerTwo();

                 darwerOne.open();

                 darwerTwo.open();

              }

          }

          由于沒有使用Façade模式,可以看到要想得到這個文件要首先打開第一個抽屜,然后再打開第二個抽屜,在我們實際所開發(fā)的系統(tǒng)中,有時候客戶要實現(xiàn)某一操作,并不需要知道實現(xiàn)這一操作的詳細步驟,而是簡單地點擊某一個按鈕就可以得到自己想要的結果。下面對上面的代碼使用Façade模式進行改進,建立一個FacadeDrawer類:

          class DrawerFacade{

              DrawerOne darwerOne=new DrawerOne();

              DrawerTwo darwerTwo=new DrawerTwo();

              public void open(){

                 darwerOne.open();

                 darwerTwo.open();

              }

          }

          修改Client類:

          public class DrawerClient{

              public static void main(String []args){

                 DrawerFacade drawer=new DrawerFacade();

                 drawer.open();

              }

          }

          輸出結果如下:

          第一個抽屜被打開了

          得到第二個抽屜的鑰匙

          第二個抽屜被打開了

          得到這個重要文件

          正如上面所說,客戶端client,它并不需要關心子系統(tǒng),而是關心DrawerFacade所留下來的和外部交互的接口,而子系統(tǒng)在DrawerFacade的聚合。

          以上只是個人拙見,哪里有不正確的地方,希望大家多多批評指正。^_^

              Facade模式主要適用于以下幾種情況:

          1)    不需要使用一個復雜系統(tǒng)的所有功能,而且可以創(chuàng)建一個新的類,包含訪問系統(tǒng)的所有規(guī)則。如果只需要使用系統(tǒng)的部分功能,那么你為新類所創(chuàng)建的API將比原系統(tǒng)的API簡單的多。

          2)    希望封裝或者隱藏系統(tǒng)原系統(tǒng)。

          3)    希望使用原系統(tǒng)的功能,而且還希望增加一些新的功能。

          4)    編寫新類的成本小于所有人學會使用或者未來維護原系統(tǒng)上所需的成本。

          Feedback

          # re: 設計模式學習筆記(一)--Facade外觀模式  回復  更多評論   

          2011-03-24 09:55 by 淡淡的
          不錯

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 剑阁县| 诸暨市| 淳化县| 崇义县| 怀化市| 定南县| 威远县| 鄂伦春自治旗| 胶南市| 曲麻莱县| 常山县| 分宜县| 芦溪县| 丹江口市| 荥经县| 华蓥市| 芦山县| 临湘市| 南汇区| 博罗县| 武鸣县| 洞头县| 金湖县| 安国市| 蒲城县| 商水县| 巨鹿县| 都江堰市| 施秉县| 永福县| 墨江| 巴中市| 文成县| 红原县| 新乐市| 呼伦贝尔市| 谢通门县| 牡丹江市| 博罗县| 喜德县| 大渡口区|