Java設(shè)計模式中的外觀模式詳解
一 定義
外觀(Facade)模式又叫作門面模式,是一種通過為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體細(xì)節(jié),這樣會大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護性。
二 UML類圖
外觀模式是為了解決類與類之家的依賴關(guān)系的,像spring一樣,可以將類和類之間的關(guān)系配置到配置文件中,而外觀模式就是將他們的關(guān)系放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到接口,看下類圖:(我們以一個計算機的啟動過程為例)

- 外觀類(Facade):為調(diào)用端提供統(tǒng)一的調(diào)用接口,外觀類知道哪些子系統(tǒng)負(fù)責(zé)處理請求,從而將調(diào)用端的請求代理給適當(dāng)子系統(tǒng)對象
- 調(diào)用者(Client):外觀接口的調(diào)用者
- 子系統(tǒng)的集合:指模塊或者子系統(tǒng),處理Facade 對象指派的任務(wù),他是功能的實際提供者
三 代碼實例
外觀模式可以理解為轉(zhuǎn)換一群接口,客戶只要調(diào)用一個接口,而不用調(diào)用多個接口才能達到目的。比如:在 po
上安裝軟件的時候經(jīng)常有一鍵安裝選項(省去選擇安裝目錄、安裝的組件等等),還有就是手機的重啟功能(把關(guān)機和啟動合為一個操作)。
外觀模式就是解決多個復(fù)雜接口帶來的使用困難,起到簡化用戶操作的作用
示意圖說明

外觀(Facade)角色:為多個子系統(tǒng)對外提供一個共同的接口。
子系統(tǒng)(Sub System)角色:實現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。
客戶(Client)角色:通過一個外觀角色訪問各個子系統(tǒng)的功能。
模式的實現(xiàn)
public class CPU {
public void startup(){
System.out.println("cpu startup!");
}
public void shutdown(){
System.out.println("cpu shutdown!");
}
}
public class Memory {
public void startup(){
System.out.println("memory startup!");
}
public void shutdown(){
System.out.println("memory shutdown!");
}
}
public class Disk {
public void startup(){
System.out.println("disk startup!");
}
public void shutdown(){
System.out.println("disk shutdown!");
}
}
public class Computer {
private CPU cpu;
private Memory memory;
private Disk disk;
public Computer(){
cpu = new CPU();
memory = new Memory();
disk = new Disk();
}
public void startup(){
System.out.println("start the computer!");
cpu.startup();
memory.startup();
disk.startup();
System.out.println("start computer finished!");
}
public void shutdown(){
System.out.println("begin to close the computer!");
cpu.shutdown();
memory.shutdown();
disk.shutdown();
System.out.println("computer closed!");
}
}
//測試
public class User {
public static void main(String[] args) {
Computer computer = new Computer();
computer.startup();
computer.shutdown();
}
}輸出結(jié)果如下:
start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!
如果我們沒有Computer類,那么,CPU、Memory、Disk他們之間將會相互持有實例,產(chǎn)生關(guān)系,這樣會造成嚴(yán)重的依賴,修改一個類,可能會帶來其他類的修改,這不是我們想要看到的,有了Computer類,他們之間的關(guān)系被放在了Computer類里,這樣就起到了解耦的作用,這,就是外觀模式!
四 外觀模式的優(yōu)缺點
外觀模式的特點:
外觀(Facade)模式是“迪米特法則”的典型應(yīng)用,它有以下主要優(yōu)點:
- 降低了子系統(tǒng)與客戶端之間的耦合度,使得子系統(tǒng)的變化不會影響調(diào)用它的客戶類。
- 對客戶屏蔽了子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。
- 降低了大型軟件系統(tǒng)中的編譯依賴性,簡化了系統(tǒng)在不同平臺之間的移植過程,因為編譯一個子系統(tǒng)不會影響其他的子系統(tǒng),也不會影響外觀對象。
外觀(Facade)模式的主要缺點如下:
- 不能很好地限制客戶使用子系統(tǒng)類,很容易帶來未知風(fēng)險。
- 增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。
五 外觀模式的使用場景
通常在以下情況下可以考慮使用外觀模式。
- 對分層結(jié)構(gòu)系統(tǒng)構(gòu)建時,使用外觀模式定義子系統(tǒng)中每層的入口點可以簡化子系統(tǒng)之間的依賴關(guān)系。
- 當(dāng)一個復(fù)雜系統(tǒng)的子系統(tǒng)很多時,外觀模式可以為系統(tǒng)設(shè)計一個簡單的接口供外界訪問。
- 當(dāng)客戶端與多個子系統(tǒng)之間存在很大的聯(lián)系時,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨立性和可移植性。
到此這篇關(guān)于Java設(shè)計模式中的外觀模式詳解的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運行技巧
做項目的時候我們肯定接觸過很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握J(rèn)ava可執(zhí)行JAR文件的運行技巧,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

