設(shè)計(jì)模式詳解——外觀模式

前言
今天我們來看另一個(gè)改變接口的設(shè)計(jì)模式,不過它改變接口的原因是為了簡化接口。這個(gè)模式被巧妙地叫做外觀模式,之所以這么稱呼,是因?yàn)樗鼘⒁粋€(gè)或多個(gè)類的復(fù)雜的實(shí)現(xiàn)都藏在了背后,只顯露出一個(gè)干凈美好的外觀。好了,下面我們就來展開分享下。
外觀模式
外觀模式提供了一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口,它定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。下面是外觀模式的一個(gè)模型圖,核心的元素有三個(gè),一個(gè)客戶端,一個(gè)外觀模式,另一塊是很繁雜的子系統(tǒng),其中外觀模式這一層,主要是簡化子系統(tǒng)的接口,為客戶端提供更簡潔的調(diào)用:

要點(diǎn)
當(dāng)需要簡化并統(tǒng)一一個(gè)很大的接口或者一群復(fù)雜的接口時(shí),使用外觀模式 實(shí)現(xiàn)一個(gè)外觀模式,需要將子系統(tǒng)組合進(jìn)外觀中,然后將工作委托給子系統(tǒng)執(zhí)行 外觀將客戶從一個(gè)復(fù)雜的子系統(tǒng)中解耦
示例代碼
下面我們通過一個(gè)很形象的日常生活示例,來說明外觀模式具體的應(yīng)用場景。
我們可以想象這樣一個(gè)場景:下班回到家,你想看個(gè)電影,放松一下,但是你并沒有感覺到很開心。因?yàn)榭紤]到要拖地,而且家里水壺還沒水了,你還要燒個(gè)熱水,還有自己找電影,想到這一切的一切,你突然放棄了想看電影的想法。
因?yàn)樵谡G闆r下,每一步都要自己親自操作:首先先打開家里的掃地機(jī)器人(這已經(jīng)算高端了),然后接水燒水,之后才能打開電腦、找電影,整個(gè)過程操作完之后,你才能開始看電影,但是這時(shí)候你可能會(huì)感覺到更加疲憊。
但是假如,突然有一天你的生活開啟了外觀模式,那整個(gè)場景就完全不一樣了。這時(shí)候回到家,你只需要一鍵操作,掃地、燒水、找電影都可以一氣呵成,這樣你就可以直接看自己喜歡的電影了,豈不是美滋滋!
下面我們就來詳細(xì)看下這個(gè)一氣呵成的方法,具體如何用代碼來實(shí)現(xiàn):
掃地操作
正常情況下,你要自己用掃把掃地,如果是掃地機(jī)器人的話,你至少需要啟動(dòng)下開關(guān)
public?class?Broom?{
????public?void?sweepFloor()?{
????????System.out.println("掃帚正在掃地!");
????}
}
燒水操作
燒水操作也一樣,你要用水壺接水,然后燒水
public?class?Kettle?{
????public?void?boilWater()?{
????????System.out.println("燒水壺正在接水!");
????????System.out.println("燒水壺正在燒水!");
????}
}
搜索電影操作
緊接著你還要自己搜索電影,然后才能開始看電影
public?class?Computer?{
????public?void?searchVideo()?{
????????System.out.println("電腦正在查找電影!");
????????System.out.println("電腦查找電影完成!");
????}
}
外觀模式
但是如果你的生活啟用了外觀模式,僅需一鍵操作,就可以完成以上操作,同時(shí)開始看電影,感覺這個(gè)痛苦的過程一下就消失了呢,是不是一下就感覺美滋滋了呢!
public?class?SystemFacade?{
????Broom?broom?=?new?Broom();
????Kettle?kettle?=?new?Kettle();
????Computer?computer?=?new?Computer();
????public?void?facade()?{
????????broom.sweepFloor();
????????kettle.boilWater();
????????computer.searchVideo();
????????System.out.println("開始播放電影!");
????}
}
測試代碼
好了,下面就讓我們來一鍵操作吧!
??@Test
????public?void?testFacade()?{
????????SystemFacade?facade?=?new?SystemFacade();
????????facade.facade();
????}
然后我們就可以愉快地看電影了:

和適配器比較
外觀模式不只是簡化了接口,也將客戶從組件的子系統(tǒng)中解耦 外觀模式和適配器模式可以包裝許多類,但是外觀模式的意圖是簡化接口,而適配器的意圖是將接口轉(zhuǎn)換成不同的接口
總結(jié)
從上面的示例代碼,以及我們舉的生活中的例子,我們可以很清楚地看到,外觀模式本質(zhì)上就是整合接口,為客戶端提供一個(gè)更簡潔的接口。現(xiàn)實(shí)生活中,外觀模式的例子還有很多,特別是在現(xiàn)在這種智能時(shí)代,比如小愛同學(xué)、小度以及我們的手機(jī)智能助手等,都是典型的外觀模式。從這一點(diǎn)上來講,人工智能確實(shí)改變了我們的生活,讓生活的繁雜開始變得簡單,語音搜索、語音控制各類電器……萬物互聯(lián),真的是指日可待!
好了,關(guān)于外觀模式我們就說這么多,總體來看這塊的內(nèi)容也確實(shí)不過。
- END -