Java設計模式之外觀模式示例詳解
定義
外觀模式為多個復雜的子系統,提供瞭一個一致的界面,使得調用端隻和這個接口發生調用,而無須關系這個子系統內部的細節
案例
需求
看電影的時候需要進行一系列的操作,比如打開播放器,放下屏幕,打開投影儀,打開音響等,這個要怎麼進行管理呢
方案:外觀模式實現
定義播放器類
public class Player { private static Player player = new Player(); private Player(){} public static Player getInstance(){ return player; } public void on(){ System.out.println("打開播放器"); } public void off(){ System.out.println("關閉播放器"); } public void play(){ System.out.println("使用播放器播放電影"); } public void pause(){ System.out.println("暫停播放器"); } public void select(){ System.out.println("選擇喜歡的電影"); } }
定義投影儀類
public class Projector { private static Projector projector = new Projector(); private Projector(){} public static Projector getInstance(){ return projector; } public void on(){ System.out.println("放下屏幕,打開投影儀"); } public void off(){ System.out.println("關閉投影儀"); } public void focus(){ System.out.println("調節投影儀焦距"); } public void zoom(){ System.out.println("投影儀變焦"); } }
定義音響類
public class Stereo { private static Stereo stereo = new Stereo(); private Stereo(){} public static Stereo getInstance(){ return stereo; } public void on(){ System.out.println("打開音響"); } public void off(){ System.out.println("關閉音響"); } public void setVolume(){ System.out.println("調節音響音量"); } }
定義爆米花機類
/** * 爆米花機 * @author:liyajie * @createTime:2022/3/2 14:24 * @version:1.0 */ public class Popcorn { private static Popcorn popcorn = new Popcorn(); private Popcorn(){} public static Popcorn getInstance(){ return popcorn; } public void on(){ System.out.println("打開爆米花機"); } public void off(){ System.out.println("關閉爆米花機"); } public void pop(){ System.out.println("制作爆米花"); } }
定義傢庭影院外觀類
public class HomeTheaterFacade { // 聚合各個子系統 private Player player; private Popcorn popcorn; private Projector projector; private Stereo stereo; public HomeTheaterFacade(){ } // 全參構造器 public HomeTheaterFacade(Player player, Popcorn popcorn,Projector projector,Stereo stereo){ this.player = player; this.popcorn = popcorn; this.projector = projector; this.stereo = stereo; } // 準備階段 public void ready(){ popcorn.on(); player.on(); projector.on(); stereo.on(); } // 播放 public void play(){ player.select(); popcorn.pop(); projector.focus(); stereo.setVolume(); } // 結束 public void end(){ player.off(); popcorn.off(); projector.off(); stereo.off(); } }
定義測試類
public class Test { public static void main(String[] args) { HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(Player.getInstance(),Popcorn.getInstance(),Projector.getInstance(),Stereo.getInstance()); homeTheaterFacade.ready(); homeTheaterFacade.play(); homeTheaterFacade.end(); } }
查看測試結果
分析
我們通過傢庭影院外觀類HomeTheaterFacade的ready,play,end方法操作瞭播放器,投影儀等的打開,關閉,對於傢庭影院外觀類來說,他是不需要知道播放器,投影儀等的打開,關閉具體是怎麼樣實現的。在一定程度上實現瞭解耦,易維護和擴展。
總結
優勢:
1.外觀模式對外屏蔽瞭子系統的實現細節(安全性)
2.外觀模式降低瞭客戶端與子系統交互的復雜性,對客戶端和子系統進行解耦合,子系統內部的模塊更容易維護和擴展
3.通過合理的使用外觀模式,可以幫助我們更好的劃分訪問層次
使用場景
1.對分層的系統進行構建時,使用外觀模式可以簡化子系統之間的依賴關系
2.當有一個復雜的系統,裡面有很多子系統,有大量的操作,這時候可以使用外觀模式
3.當客戶端與多個子系統之間存在很多耦合時,引入外觀模式,可以將他們分離,提高子系統的獨立性和可移植性
以上就是Java設計模式之外觀模式示例詳解的詳細內容,更多關於Java外觀模式的資料請關註WalkonNet其它相關文章!