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

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

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

    合工大很牛很牛牛

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

    關燈——放下屏幕——打開揚聲器——打開DVD

    實現如下:

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

        }

    }

     

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

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

     

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

    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。前提條件是:當客戶端要實現某個功能的時候,必須要調用一連串的類及其函數。

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

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

     

    最后,上面的TheaterFacade類還可以寫的更靈活點,因為上面的程序把實例化LightScreen等放到了具體的方法內部,這樣當我想“關家庭影院”時,因為找不到具體對象就沒法操作了。

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

    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 化的了 閱讀(1265) 評論(6)  編輯  收藏 所屬分類: 設計模式

    Feedback

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

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

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

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

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

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

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

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

    主站蜘蛛池模板: 亚洲人成无码网站久久99热国产| 亚洲国产精品日韩| 在线免费视频一区二区| 国产成人精品免费视频动漫| 成人性生免费视频| 亚洲人成色77777在线观看大| 亚洲春色在线视频| 国产成人亚洲精品| 一区二区三区视频免费观看| 男人都懂www深夜免费网站| 无人在线观看完整免费版视频| 精品国产精品久久一区免费式| 亚洲精品一级无码中文字幕| 亚洲尹人香蕉网在线视颅| 亚洲色丰满少妇高潮18p| 黄色免费在线观看网址| 免费女人高潮流视频在线观看| 在线免费观看中文字幕| 亚洲线精品一区二区三区| 亚洲毛片基地4455ww| 一级毛片a免费播放王色电影 | 中国性猛交xxxxx免费看| 人与禽交免费网站视频| 亚洲精品网站在线观看不卡无广告| 亚洲网站在线观看| 污污污视频在线免费观看| 120秒男女动态视频免费| 亚洲欧洲日产国码一级毛片| 亚洲最大在线观看| 精品久久久久久国产免费了| 亚洲免费网站观看视频| 亚洲Av无码精品色午夜 | 麻豆91免费视频| 免费观看激色视频网站(性色)| 成人亚洲性情网站WWW在线观看| 亚洲AV无码精品蜜桃| 男人的天堂网免费网站| 亚洲精品第一国产综合境外资源| 亚洲伊人久久大香线蕉啊| 国产免费一区二区三区在线观看 | 日本黄色免费观看|