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

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

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

    合工大很牛很牛牛

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks
    假設(shè)家里有一組家庭影院,包括:燈光,幻燈屏幕,揚(yáng)聲器,DVD。如果我們想打開這些設(shè)備開始看電影,必須先進(jìn)行如下操作:

    關(guān)燈——放下屏幕——打開揚(yáng)聲器——打開DVD

    實(shí)現(xiàn)如下:

    package javaapplication35;

     

    public class Main {

        public static void main(String[] args) {

            Light light=new Light();

            light.turnOff();

           

            Screen screen=new Screen();

            screen.down();

           

            Amplifier amplifier=new Amplifier();

            amplifier.On();

           

            Dvdplayer player=new Dvdplayer();

            player.On();

        }

    }

     

    class Light {

        public void turnOn() {

            System.out.println("Lights Turn On");

        }

        public void turnOff() {

            System.out.println("Lights Turn Off");

        }

    }

     

    class Screen {

        public void down() {

            System.out.println("Put the Screen Down");

        }

        public void up() {

            System.out.println("Put the Screen Up");

        }

    }

     

    class Amplifier {

        public void On() {

            System.out.println("Turn Sound Amplifier On");

        }

        public void Off() {

            System.out.println("Turn Sound Amplifier Off");

        }

    }

     

    class Dvdplayer {

        public void On() {

            System.out.println("Turn the DVD player On");

        }

        public void Off() {

            System.out.println("Turn the DVD player Off");

        }

    }

     

    可以看到,想看部電影,在客戶端(主程序)要進(jìn)行N多操作后才行。其實(shí)如果設(shè)備更多,比如說還要調(diào)整音頻屬性,切換DVD專屬頻道,打開空調(diào)等。每次我想看部電影,就要重復(fù)執(zhí)行這些命令。

    可不可執(zhí)行一次命令就可以搞定一切呢?很簡單,專門寫個類,寫個函數(shù)實(shí)現(xiàn)這一串命令就可以了。客戶端到時候就只要調(diào)用這個新增的類中的函數(shù)即可。

     

    把主函數(shù)的過程直接移去到另一個類的函數(shù)中:

    public class Main {

        public static void main(String[] args) {

            (new TheaterFacade()).WatchDvd();

        }

    }

     

    class TheaterFacade {

        public void WatchDvd() {

            Light light = new Light();

            light.turnOff();

     

            Screen screen = new Screen();

            screen.down();

     

            Amplifier amplifier = new Amplifier();

            amplifier.On();

     

            Dvdplayer player = new Dvdplayer();

            player.On();

        }

    }

     

    這個就是最基本的Façade Pattern。前提條件是:當(dāng)客戶端要實(shí)現(xiàn)某個功能的時候,必須要調(diào)用一連串的類及其函數(shù)。

    為了實(shí)現(xiàn)“一鍵”功能能,就在客戶端和眾多的類庫(實(shí)現(xiàn)具體過程)中間,添加一個Façade類,類中的方法實(shí)現(xiàn)了各種不同的“一鍵功能”(一鍵打開家庭影院,一鍵關(guān)閉。。。)

    這樣做還有一個好處就是隔離了客戶端和起具體實(shí)現(xiàn)作用的類庫。

     

    最后,上面的TheaterFacade類還可以寫的更靈活點(diǎn),因?yàn)樯厦娴某绦虬褜?shí)例化LightScreen等放到了具體的方法內(nèi)部,這樣當(dāng)我想“關(guān)家庭影院”時,因?yàn)檎也坏骄唧w對象就沒法操作了。

    把實(shí)例化放到具體方法外面,并添加一個構(gòu)造函數(shù),以便可以指定特定的播放儀器(比如家里有兩個揚(yáng)聲器的時候?)

    package javaapplication35;

     

    public class Main {

        public static void main(String[] args) {

            Light light = new Light();

            Screen screen = new Screen();

            Amplifier amplifier = new Amplifier();

            Dvdplayer dvdplayer = new Dvdplayer();

            TheaterFacade facade = new TheaterFacade(light, screen, amplifier, dvdplayer);

            facade.WatchDvd();

            facade.CloseDvd();

        }

    }

     

    class TheaterFacade {

        Light light;

        Screen screen;

        Amplifier amplifier;

        Dvdplayer dvdplayer;

        TheaterFacade(Light light, Screen screen, Amplifier amplifier, Dvdplayer dvdplayer) {

            this.light = light;

            this.screen = screen;

            this.amplifier = amplifier;

            this.dvdplayer = dvdplayer;

        }

        public void WatchDvd() {

            light.turnOff();

            screen.down();

            amplifier.On();

            dvdplayer.On();

        }

        public void CloseDvd() {

            light.turnOn();

            screen.up();

            amplifier.Off();

            dvdplayer.Off();

        }

    }

     

    class Light {

        public void turnOn() {

            System.out.println("Lights Turn On");

        }

        public void turnOff() {

            System.out.println("Lights Turn Off");

        }

    }

     

    class Screen {

        public void down() {

            System.out.println("Put the Screen Down");

        }

        public void up() {

            System.out.println("Put the Screen Up");

        }

    }

     

    class Amplifier {

        public void On() {

            System.out.println("Turn Sound Amplifier On");

        }

        public void Off() {

            System.out.println("Turn Sound Amplifier Off");

        }

    }

     

    class Dvdplayer {

        public void On() {

            System.out.println("Turn the DVD player On");

        }

        public void Off() {

            System.out.println("Turn the DVD player Off");

        }

    }

     

     

     

    posted on 2008-07-08 15:20 化的了 閱讀(1273) 評論(6)  編輯  收藏 所屬分類: 設(shè)計模式

    Feedback

    # re: Facade Pattern[未登錄] 2008-07-08 17:08 sea
    不是很同意樓主的見解  回復(fù)  更多評論
      

    # re: Facade Pattern 2008-07-08 19:02 化的了
    @sea
    很想聽聽

    是對這句話有意見嗎?
    當(dāng)客戶端要實(shí)現(xiàn)某個功能的時候,必須要調(diào)用一連串的類及其函數(shù)。為了實(shí)現(xiàn)“一鍵”功能能,就在客戶端和眾多的類庫(實(shí)現(xiàn)具體過程)中間,添加一個Façade類,類中的方法實(shí)現(xiàn)了各種不同的“一鍵功能”  回復(fù)  更多評論
      

    # re: Facade Pattern 2008-07-08 20:45 si
    應(yīng)該是不同意這個吧:上面的TheaterFacade類還可以寫的更靈活點(diǎn)。。。  回復(fù)  更多評論
      

    # re: Facade Pattern 2008-07-08 23:05 化的了
    @si
    中間那段程序只是思路的一個過程(一個中間思路,向Facade Pattern轉(zhuǎn)變的地方)
    最后的那段程序才是Facade pattern的實(shí)現(xiàn)。@si
      回復(fù)  更多評論
      

    # re: Facade Pattern 2008-07-09 19:23 leekiang
    能不能用幾句話描述清楚呢。或者例子再簡短點(diǎn)。寫得太多了,沒仔細(xì)看。  回復(fù)  更多評論
      

    # re: Facade Pattern 2008-07-09 22:26 化的了
    @leekiang
    書上六七十頁,我就寫了三四頁。。。已經(jīng)夠提煉的了

    不過你說的也對,以后寫文章,描述的要更簡短清晰些,我也覺得自己寫的有點(diǎn)啰嗦  回復(fù)  更多評論
      

    主站蜘蛛池模板: 成人免费视频观看无遮挡| 国产在线观看www鲁啊鲁免费| 亚洲国产精品午夜电影| 好爽…又高潮了毛片免费看| 自拍偷自拍亚洲精品播放| 国产亚洲精品a在线无码| 1000部拍拍拍18勿入免费视频下载| 亚洲无码一区二区三区| 亚洲精品国产精品乱码不卡| 亚洲午夜免费视频| mm1313亚洲国产精品无码试看| 亚洲AV无码精品色午夜在线观看| 男女免费观看在线爽爽爽视频| 色老头综合免费视频| 亚洲字幕在线观看| 久久久久久亚洲精品不卡| 国产精彩免费视频| 久久99精品免费一区二区| 亚洲a视频在线观看| 91麻豆精品国产自产在线观看亚洲 | 亚洲精品动漫免费二区| 一级毛片不卡免费看老司机| 亚洲一区在线视频观看| 精品亚洲视频在线观看| 成全高清视频免费观看| 四虎影视成人永久免费观看视频 | 亚洲一区二区三区播放在线| 国产精品亚洲二区在线观看| 黄色成人网站免费无码av| 中文无码成人免费视频在线观看| 亚洲AV日韩AV永久无码色欲 | 亚洲国产日产无码精品| 中国亚洲女人69内射少妇| 夭天干天天做天天免费看| 全部免费毛片在线播放| 精品国产免费一区二区三区| 亚洲欧洲无码AV不卡在线| 人人揉揉香蕉大免费不卡| 一本大道一卡二大卡三卡免费| 久久国产亚洲精品| 亚洲国产高清视频在线观看|