【結構型模式】外觀模式

前言(一些廢話,可以忽略)

  • 外觀模式,比較簡單也好理解,就是給一個東西一個外觀,將其封裝起來
  • 這裏當然也會用到我們的組合
  • PS.部分類實現見文末

解決實際問題

  • 假設一個家庭影院,我們有3種或更多設備,電動屏幕,dvd,音響,當我們要觀看電影時,得一步一步操作,先將屏幕放下,音響打開,dvd打開,三個步驟
  • 當我們要去上個廁所時,得先暫停dvd,再暫停音響(假如),這又是兩個步驟
  • 當電影觀看結束,需要關閉時,又有三個步驟等着我們
  • 思考一下,在觀看電影的操作,或者結束觀看操作這些步驟是不是都基本上是固定不變的呢,而且需要很多步才能如打開電影,那我們爲什麼不把這些不走整合封裝起來呢,搞成一個按鈕,只需要一鍵,就可以將dvd,音響,屏幕打開放下,結束時,也只需要一鍵,就可以將所有設備關閉好
  • 這就是我們今天的設計模式要解決的問題,外觀模式

外觀模式提高問題的擴展性

  • 設備1,dvd
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class DVD {
    public void play(){
        System.out.println("DVD.play");
    }

    public void pause(){
        System.out.println("DVD.pause");
    }

    public void close(){
        System.out.println("DVD.close");
    }
}
  • 設備2,音響
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class Radio {
    public void playRadio(){
        System.out.println("Radio.playRadio");
    }

    public void closeRadio(){
        System.out.println("Radio.closeRadio");
    }
}
  • 設備3,屏幕
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class Screen {
    public void down(){
        System.out.println("Screen.down");
    }

    public void up(){
        System.out.println("Screen.up");
    }
}
  • 在調用的客戶端和設置之間設置一個緩衝層,聚合或組合各種設備,將設備的操作進行封裝
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class FacadeMode {
    DVD dvd = new DVD();
    Radio radio = new Radio();
    Screen screen = new Screen();

    public void play() {
        screen.down();
        radio.playRadio();
        dvd.play();
    }

    public void pause() {
        dvd.pause();
    }

    public void end() {
        dvd.close();
        radio.closeRadio();
        screen.up();

    }
}
  • 這樣,客戶端在調用的時候就可以順利的一鍵操作了
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class FacadeClient {
    public static void main(String[] args) {
        FacadeMode client = new FacadeMode();
        //開始看,一鍵打開
        client.play();
        //看完了,一鍵關閉
        client.end();
    }
}

總結

  • 外觀模式比較好理解,就是將很多東西封裝爲一鍵模式
  • 在面對老代碼的時候,可以將老代碼的多個操作封裝爲一個方法,方便複用

願你不捨愛與自由。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章