外觀模式
1.定義:
要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個(gè)統(tǒng)一的對(duì)象進(jìn)行。外觀模式提供一個(gè)高層次的接口拷窜,使得子系統(tǒng)更易于使用旷祸。
2.使用場(chǎng)景:
- 為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)易接口叉庐。外觀模式可以提供一個(gè)簡(jiǎn)單統(tǒng)一的接口宏多,對(duì)外隱藏子系統(tǒng)的具體實(shí)現(xiàn)、隔離變化嗦随;
- 當(dāng)你需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí)列荔,使用外觀模式定義子系統(tǒng)中每層的入口點(diǎn)。如果各子系統(tǒng)之間是相互依賴的枚尼,那么通過外觀模式進(jìn)行接口通信贴浙,使得各子系統(tǒng)之間相互解耦,達(dá)到各子系統(tǒng)互不依賴的效果署恍。
3.UML圖
4.詳解:
外觀模式是開發(fā)過程中使用頻率極高的一種結(jié)構(gòu)型設(shè)計(jì)模式崎溃。假如現(xiàn)在需要開發(fā)一個(gè)第三方SDK,一般都會(huì)使用外觀模式盯质,對(duì)外隱藏系統(tǒng)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)袁串,僅提供一個(gè)統(tǒng)一的接口供外部調(diào)用,這樣既減低了用戶使用成本呼巷,也對(duì)用戶屏蔽了很多的實(shí)現(xiàn)細(xì)節(jié)囱修。
下面看代碼舉例:
private static class SubSystemA {
private void start() {
System.out.println("sub system A start");
}
private void end() {
System.out.println("sub system A end");
}
}
private static class SubSystemB {
private void start() {
System.out.println("sub system B start");
}
private void end() {
System.out.println("sub system B end");
}
}
private static class SubSystemC {
private void start() {
System.out.println("sub system C start");
}
private void end() {
System.out.println("sub system C end");
}
}
上面三個(gè)類表示整個(gè)系統(tǒng)的三個(gè)子系統(tǒng),下面是對(duì)外統(tǒng)一的外觀類王悍,它持有三個(gè)子系統(tǒng)類的實(shí)例蔚袍,并對(duì)外提供統(tǒng)一的接口(start/end),方便外部調(diào)用:
public static class SystemFacade {
private static SubSystemA subSystemA = new SubSystemA();
private static SubSystemB subSystemB = new SubSystemB();
private static SubSystemC subSystemC = new SubSystemC();
private void start() {
subSystemA.start();
subSystemB.start();
subSystemC.start();
}
private void end() {
subSystemA.end();
subSystemB.end();
subSystemC.end();
}
}
測(cè)試代碼:
public static void main(String[] args) {
SystemFacade systemFacade = new SystemFacade();
systemFacade.start();
systemFacade.end();
/**
sub system A start
sub system B start
sub system C start
sub system A end
sub system B end
sub system C end
*/
}
到這里配名,外觀模式的代碼舉例就結(jié)束了,從輸出結(jié)果一看便知晋辆,各子系統(tǒng)均參與了工作渠脉,而且它們之間完全解耦,達(dá)到預(yù)期目的瓶佳。