前言(一些廢話,可以忽略)
- 外觀模式,比較簡單也好理解,就是給一個東西一個外觀,將其封裝起來
- 這裏當然也會用到我們的組合
- 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();
}
}
總結
- 外觀模式比較好理解,就是將很多東西封裝爲一鍵模式
- 在面對老代碼的時候,可以將老代碼的多個操作封裝爲一個方法,方便複用
願你不捨愛與自由。