好了。上一篇我們講完了代理模式,這篇文章,我們來認識一下外觀模式。外觀模式其實很簡單,因爲這個模式我們大多數程序員都會經常用到,只是我們不知道這就叫外觀模式。比如說,領導讓你完成一個excel表格導入日誌數據的功能。那你需要寫一個讀取excel表格數據的工具類。然後再寫一個從讀取到的數據篩選出符合格式的日誌數據的方法,然後再寫一個日誌入庫的方法。這幾個方法都是不同的作用,只爲了完成導入的功能。而你的領導不管你是怎麼實現的,反正給你一個excel表格。你就把數據導入就好了。你和領導交互,但是領導不需要知道具體實現,而這個就是外觀模式。
好,照舊還是寫一個例子。我們來用代碼實現一個電腦開機的例子,藉此來表現外觀模式。首先,電腦有cpu,內存,和硬盤。要想電腦開機,得這些硬件都能運行纔可以。
因爲這個例子的代碼太簡單,所以一次全部列出來吧:
public class CPU {
public void startCpu(){
System.out.println("cpu start!");
}
public void stopCpu(){
System.out.println("cpu stop!");
}
}
public class Disk {
public void startDisk(){
System.out.println("disk start!");
}
public void stopDisk(){
System.out.println("disk stop!");
}
}
public class Memory {
public void startMemory(){
System.out.println("start memory!");
}
public void stopMemory(){
System.out.println("stop memory!");
}
}
public class Computer {
public Computer() {
}
public void startComputer(){
CPU cpu = new CPU();
Disk disk = new Disk();
Memory memory = new Memory();
cpu.startCpu();
disk.startDisk();
memory.startMemory();
}
public void stopComputer(){
CPU cpu = new CPU();
Disk disk = new Disk();
Memory memory = new Memory();
cpu.stopCpu();
disk.stopDisk();
memory.stopMemory();
}
}
public class FacadeTest {
public static void main(String[] args) {
Computer computer = new Computer();
computer.startComputer();
computer.stopComputer();
}
}
輸出結果爲:
cpu start!
disk start!
start memory!
cpu stop!
disk stop!
stop memory!
好了。看完這個例子,應該對外觀模式又加深了印象了。在這個電腦開機的例子中呢,Computer類是扮演了和用戶交互的角色了,假如我們想開機,只需要執行Computer類的startComputer方法就可以了。不需要接觸到startComputer方法中會調用到哪些類,也不管是先啓動CPU還是內存,總之可以起來就ok。這裏也體現了設計模式中降低耦合的原則。好了,外觀模式就介紹到這裏。
文末附送一句歌詞
陽光總在風雨後,烏雲上有晴空