<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

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

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

    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模式,可以看到要想得到這個文件要首先打開第一個抽屜,然后再打開第二個抽屜,在我們實際所開發的系統中,有時候客戶要實現某一操作,并不需要知道實現這一操作的詳細步驟,而是簡單地點擊某一個按鈕就可以得到自己想要的結果。下面對上面的代碼使用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,它并不需要關心子系統,而是關心DrawerFacade所留下來的和外部交互的接口,而子系統在DrawerFacade的聚合。

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

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

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

    2)    希望封裝或者隱藏系統原系統。

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

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

    Feedback

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

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

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

    Copyright © flustar

    主站蜘蛛池模板: 亚洲麻豆精品国偷自产在线91| 成人免费一级毛片在线播放视频 | 久久久精品国产亚洲成人满18免费网站 | 亚洲热线99精品视频| 黄色免费网址大全| 亚洲AV无码不卡在线观看下载| 久久亚洲精品无码av| 又大又粗又爽a级毛片免费看| 国产亚洲男人的天堂在线观看| 日本一道在线日本一道高清不卡免费| 亚洲日本一线产区和二线| 成人免费在线视频| 国产精品亚洲一区二区三区| 亚洲阿v天堂在线2017免费| 男人和女人高潮免费网站| 丁香五月亚洲综合深深爱| 免费看一区二区三区四区| 99人中文字幕亚洲区| 最近2019免费中文字幕6| 99热亚洲色精品国产88| 四虎免费在线观看| 男女猛烈无遮掩视频免费软件| 国产亚洲精久久久久久无码77777| 免费久久人人爽人人爽av| 亚洲精品日韩专区silk| 成年男女男精品免费视频网站 | 亚洲人成精品久久久久| 84pao国产成视频免费播放| 日本亚洲免费无线码| 亚洲Av无码国产情品久久| 久爱免费观看在线网站| 亚洲国产日韩在线人成下载| 日本免费高清一本视频| 成全动漫视频在线观看免费高清版下载| 亚洲视屏在线观看| 国产精品色午夜免费视频| 人妻在线日韩免费视频| 亚洲sss综合天堂久久久| 亚洲片一区二区三区| 亚洲无砖砖区免费| 无码AV动漫精品一区二区免费|