1. 程式人生 > 其它 >設計模式詳解——外觀模式

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

前言

今天我們來看另一個改變介面的設計模式,不過它改變介面的原因是為了簡化介面。這個模式被巧妙地叫做外觀模式,之所以這麼稱呼,是因為它將一個或多個類的複雜的實現都藏在了背後,只顯露出一個乾淨美好的外觀。好了,下面我們就來展開分享下。

外觀模式

外觀模式提供了一個統一的介面,用來訪問子系統中的一群介面,它定義了一個高層介面,讓子系統更容易使用。下面是外觀模式的一個模型圖,核心的元素有三個,一個客戶端,一個外觀模式,另一塊是很繁雜的子系統,其中外觀模式這一層,主要是簡化子系統的介面,為客戶端提供更簡潔的呼叫:

要點

  • 當需要簡化並統一一個很大的介面或者一群複雜的介面時,使用外觀模式
  • 實現一個外觀模式,需要將子系統組合進外觀中,然後將工作委託給子系統執行
  • 外觀將客戶從一個複雜的子系統中解耦

示例程式碼

下面我們通過一個很形象的日常生活示例,來說明外觀模式具體的應用場景。

我們可以想象這樣一個場景:下班回到家,你想看個電影,放鬆一下,但是你並沒有感覺到很開心。因為考慮到要拖地,而且家裡水壺還沒水了,你還要燒個熱水,還有自己找電影,想到這一切的一切,你突然放棄了想看電影的想法。

因為在正常情況下,每一步都要自己親自操作:首先先開啟家裡的掃地機器人(這已經算高端了),然後接水燒水,之後才能開啟電腦、找電影,整個過程操作完之後,你才能開始看電影,但是這時候你可能會感覺到更加疲憊。

但是假如,突然有一天你的生活開啟了外觀模式,那整個場景就完全不一樣了。這時候回到家,你只需要一鍵操作,掃地、燒水、找電影都可以一氣呵成,這樣你就可以直接看自己喜歡的電影了,豈不是美滋滋!

下面我們就來詳細看下這個一氣呵成的方法,具體如何用程式碼來實現:

掃地操作

正常情況下,你要自己用掃把掃地,如果是掃地機器人的話,你至少需要啟動下開關

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();
    }

然後我們就可以愉快地看電影了:

和介面卡比較

  • 外觀模式不只是簡化了介面,也將客戶從元件的子系統中解耦
  • 外觀模式和介面卡模式可以包裝許多類,但是外觀模式的意圖是簡化介面,而介面卡的意圖是將介面轉換成不同的介面

總結

從上面的示例程式碼,以及我們舉的生活中的例子,我們可以很清楚地看到,外觀模式本質上就是整合介面,為客戶端提供一個更簡潔的介面。現實生活中,外觀模式的例子還有很多,特別是在現在這種智慧時代,比如小愛同學、小度以及我們的手機智慧助手等,都是典型的外觀模式。從這一點上來講,人工智慧確實改變了我們的生活,讓生活的繁雜開始變得簡單,語音搜尋、語音控制各類電器……萬物互聯,真的是指日可待!

好了,關於外觀模式我們就說這麼多,總體來看這塊的內容也確實不過。