外觀模式
類型:結(jié)構(gòu)型模式
解決的問題:將客戶與復(fù)雜的子系統(tǒng)解耦
定義:提供一個統(tǒng)一的接口摄闸,用于訪問子系統(tǒng)中的一群接口。外觀定義一個高層接口阵翎,讓子系統(tǒng)更容易使用
類圖
外觀模式
參考示例
電腦開機涉及到主板院领,CPU,GPU浴麻,內(nèi)存卡得问,電源的通電及工作,不過我們僅僅只需要按下開機的按鈕软免,就可以讓其他部件進行工作椭赋,就符合外觀模式
參考代碼
子系統(tǒng)類
/**
* CPU類
*/
public class CPU {
public void onLight(){
System.out.println("CPU通電");
}
public void work(){
System.out.println("CPU工作");
}
public void offLight(){
System.out.println("CPU斷電");
}
}
/**
* 顯卡類
*/
public class GPU {
public void onLight(){
System.out.println("GPU通電");
}
public void work(){
System.out.println("GPU工作");
}
public void offLight(){
System.out.println("GPU斷電");
}
}
/**
* 主板類
*/
public class Mainboard {
public void onLight(){
System.out.println("主板通電");
}
public void work(){
System.out.println("主板工作");
}
public void offLight(){
System.out.println("主板斷電");
}
}
/**
* 內(nèi)存卡類
*/
public class MemoryCard {
public void onLight(){
System.out.println("內(nèi)存卡通電");
}
public void work(){
System.out.println("內(nèi)存卡工作");
}
public void offLight(){
System.out.println("內(nèi)存卡斷電");
}
}
/**
* 電源類
*/
public class PowerSource {
public void onLight(){
System.out.println("電源通電");
}
public void work(){
System.out.println("電源工作");
}
public void offLight(){
System.out.println("電源斷電");
}
}
外觀類:
/**
* 機箱外觀類
*/
public class CrateFacade {
private CPU cpu;
private GPU gpu;
private Mainboard mainboard;
private MemoryCard memoryCard;
private PowerSource powerSource;
public CrateFacade(CPU cpu,
GPU gpu,
Mainboard mainboard,
MemoryCard memoryCard,
PowerSource powerSource) {
this.cpu = cpu;
this.gpu = gpu;
this.mainboard = mainboard;
this.memoryCard = memoryCard;
this.powerSource = powerSource;
}
/**
* 統(tǒng)一接口(開機)
*/
public void powerUp() {
mainboard.onLight();
mainboard.work();
powerSource.onLight();
powerSource.work();
cpu.onLight();
cpu.work();
memoryCard.onLight();
memoryCard.work();
gpu.onLight();
gpu.work();
}
/**
* 關(guān)機
*/
public void powerOff() {
powerSource.offLight();
mainboard.offLight();
cpu.offLight();
gpu.offLight();
memoryCard.offLight();
}
}
客戶端類
/**
* 客戶端
*/
public class Client {
public static void main(String[] args) {
// 正常情況下這些部件都是由外部創(chuàng)建,不是由客戶端創(chuàng)建或杠,為了簡化直接創(chuàng)建
CPU cpu = new CPU();
GPU gpu = new GPU();
Mainboard mainboard = new Mainboard();
MemoryCard memoryCard = new MemoryCard();
PowerSource powerSource = new PowerSource();
// 機箱外觀哪怔,統(tǒng)一接口,與復(fù)雜的子系統(tǒng)解耦
CrateFacade crateFacade = new CrateFacade(cpu,gpu,mainboard,memoryCard,powerSource);
crateFacade.powerUp();
System.out.println();
crateFacade.powerOff();
}
}
總結(jié):
當(dāng)需要簡化并統(tǒng)一一個很大的接口或者一群復(fù)雜的接口時,使用外觀模式