設計模式詳解——外觀模式

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

要點
當需要簡化并統(tǒng)一一個很大的接口或者一群復雜的接口時,使用外觀模式 實現(xiàn)一個外觀模式,需要將子系統(tǒng)組合進外觀中,然后將工作委托給子系統(tǒng)執(zhí)行 外觀將客戶從一個復雜的子系統(tǒng)中解耦
示例代碼
下面我們通過一個很形象的日常生活示例,來說明外觀模式具體的應用場景。
我們可以想象這樣一個場景:下班回到家,你想看個電影,放松一下,但是你并沒有感覺到很開心。因為考慮到要拖地,而且家里水壺還沒水了,你還要燒個熱水,還有自己找電影,想到這一切的一切,你突然放棄了想看電影的想法。
因為在正常情況下,每一步都要自己親自操作:首先先打開家里的掃地機器人(這已經(jīng)算高端了),然后接水燒水,之后才能打開電腦、找電影,整個過程操作完之后,你才能開始看電影,但是這時候你可能會感覺到更加疲憊。
但是假如,突然有一天你的生活開啟了外觀模式,那整個場景就完全不一樣了。這時候回到家,你只需要一鍵操作,掃地、燒水、找電影都可以一氣呵成,這樣你就可以直接看自己喜歡的電影了,豈不是美滋滋!
下面我們就來詳細看下這個一氣呵成的方法,具體如何用代碼來實現(xià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("電腦查找電影完成!");
????}
}
外觀模式
但是如果你的生活啟用了外觀模式,僅需一鍵操作,就可以完成以上操作,同時開始看電影,感覺這個痛苦的過程一下就消失了呢,是不是一下就感覺美滋滋了呢!
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)換成不同的接口
總結
從上面的示例代碼,以及我們舉的生活中的例子,我們可以很清楚地看到,外觀模式本質(zhì)上就是整合接口,為客戶端提供一個更簡潔的接口?,F(xiàn)實生活中,外觀模式的例子還有很多,特別是在現(xiàn)在這種智能時代,比如小愛同學、小度以及我們的手機智能助手等,都是典型的外觀模式。從這一點上來講,人工智能確實改變了我們的生活,讓生活的繁雜開始變得簡單,語音搜索、語音控制各類電器……萬物互聯(lián),真的是指日可待!
好了,關于外觀模式我們就說這么多,總體來看這塊的內(nèi)容也確實不過。
- END -