外觀模式-引導篇及原理java
來看看司小司的新項目-家庭影院控制接口項目ide
家庭影院設備:測試
DVD播放器、投影儀、自動屏幕、環繞立體聲、爆米花機等等。spa
對於的類對象:DVDPlayer、Projector、Stereo、Popcorn、Screen、TheaterLights etc...設計
類圖以下:orm
咱們知道,這些設備須要遙控器,同時這些設備都對外提供了接口。若是一個設備一個遙控器是否是很麻煩。如今需求是,爲了方便省事。只須要一個設備來處理。對象
來源:凱哥Java(kaigejava)接口
咱們先來看看傳統的控制接口設計,步驟以下圖:get
看一場家庭影院,還這麼多步驟。確實很麻煩。咱們來分析:爆米花機能夠看做是一個子系統、投影儀是一個子系統、音響能夠看做是一個子系統等等。咱們將各個設備都單獨的看做是一個子系統,咱們就會發現,這些子系統或許存在着內部關聯關係或者是須要統籌協調工做的。有沒有更好的解決方案呢?博客
司小司調研以後,決定使用外觀模式這種設計模來實現這種需求。咱們先來看看外觀模式是什麼。
咱們能夠將以上各個設備相識或者有關聯的操做放到一個方法中,而後對外在提供統一的一個對象接口。這樣,好比說,咱們先要準備:爆米花機開機、投影儀開機、屏幕自動放下這一組操做放到一個方法中。DVD碟片選擇、燈光調暗、播放DVD這一組操做放到一個方法中。關閉各類設備操做放到一個方法中。最後咱們就獲得了以下的類圖:
通過上面分析,咱們能夠知道:
外觀模式:對外提供了一個統一的接口,來訪問子系統中一羣功能相關接口。
外觀模式定義了一個高層接口,讓子系統更容易使用。
咱們來看看代碼結構:
說明:
爆米花機、投影儀、屏幕等咱們使用的都是單例模式。由於這些東西,一個家庭一個就能夠了。因此這裏就使用了單例模式來處理的。
凱哥我的博客:www.kaigejava.com
凱哥公衆號:凱哥Java(kaigejava)
在測試類中:
咱們調用了準備及播放功能。運行結果:
咱們發現,對外提供接口解耦提升了。