漫畫(huà):設(shè)計(jì)模式之 “外觀模式”
掃描二維碼
隨時(shí)隨地手機(jī)看文章
————— 第二天 —————
————————————
首先,肯德基提供了眾多基礎(chǔ)菜品,比如雞翅、漢堡、薯?xiàng)l、沙拉、可樂(lè)等等:
這些琳瑯滿目的菜品雖好,但有些顧客犯了選擇困難癥,不知道該選什么好。
于是肯德基對(duì)這些菜品做了一定的組合,推出了各種各樣的套餐。比如A套餐,包括漢堡/薯?xiàng)l/可樂(lè);B套餐,包括漢堡/雞翅/沙拉/可樂(lè):
套餐不但搭配合理,而且價(jià)錢(qián)相對(duì)便宜,顧客可以更方便地做出選擇,餐廳的銷量也得到了提升。
餐廳為顧客提供餐飲服務(wù),和團(tuán)隊(duì)協(xié)作開(kāi)發(fā)項(xiàng)目又有哪些相似之處呢?
假設(shè)小灰在維護(hù)一個(gè)底層模塊的代碼,該模塊提供了5個(gè)基礎(chǔ)功能,這些功能對(duì)外封裝成了5個(gè)接口:
某一天,團(tuán)隊(duì)里的程序媛小紅跑過(guò)來(lái)和小灰對(duì)接:
過(guò)了幾天,小紅又跑過(guò)來(lái)和小灰對(duì)接:
小灰的想法如下:
這里所謂的“套餐”,就是底層細(xì)粒度接口的不同組合。在保留底層接口不變的前提下,中間層為調(diào)用方提供了便利。
這正是外觀模式(Facade Pattern)的設(shè)計(jì)思想:
To make a complex subsystem easier to use, a simple interface should be provided for a set of interfaces in the subsystem.
為了使復(fù)雜的子系統(tǒng)更容易被使用,應(yīng)當(dāng)為子系統(tǒng)的眾多接口提供一個(gè)簡(jiǎn)潔的高層接口。
上圖中,幾個(gè)SubSystem類對(duì)應(yīng)著我們剛才所說(shuō)的底層基礎(chǔ)功能,而Facade類對(duì)應(yīng)著中間層,為調(diào)用方提供“套餐”服務(wù)。
public class SubSystemA {
public void methodA(){
System.out.println("執(zhí)行方法A");
}
}
public class Facade {
public void comboMethodA(){
SubSystemA subSystemA = new SubSystemA();
SubSystemB subSystemB = new SubSystemB();
SubSystemD subSystemD = new SubSystemD();
subSystemA.methodA();
subSystemB.methodB();
subSystemD.methodD();
}
public void comboMethodB(){
SubSystemE subSystemE = new SubSystemE();
SubSystemD subSystemD = new SubSystemD();
SubSystemB subSystemB = new SubSystemB();
subSystemE.methodE();
subSystemD.methodD();
subSystemB.methodB();
}
}
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
//通過(guò)外觀模式,調(diào)用組合接口A
facade.comboMethodA();
//通過(guò)外觀模式,調(diào)用組合接口B
facade.comboMethodB();
}
}
—————END—————
喜歡本文的朋友,歡迎關(guān)注公眾號(hào) 程序員小灰,收看更多精彩內(nèi)容
點(diǎn)個(gè)[在看],是對(duì)小灰最大的支持!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!