溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java外觀模式示例分析

發(fā)布時間:2022-03-03 09:08:27 來源:億速云 閱讀:138 作者:iii 欄目:開發(fā)技術

本篇內容介紹了“Java外觀模式示例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    定義

    外觀模式為多個復雜的子系統(tǒng),提供了一個一致的界面,使得調用端只和這個接口發(fā)生調用,而無須關系這個子系統(tǒng)內部的細節(jié)

    案例

    需求

    看電影的時候需要進行一系列的操作,比如打開播放器,放下屏幕,打開投影儀,打開音響等,這個要怎么進行管理呢

    方案:外觀模式實現

    定義播放器類

    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("調節(jié)投影儀焦距");
        }
    
        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("調節(jié)音響音量");
        }
    }

    定義爆米花機類

    /**
     * 爆米花機
     * @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 {
    
        // 聚合各個子系統(tǒng)
        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();
        }
    }

    查看測試結果

    Java外觀模式示例分析

    分析

    我們通過家庭影院外觀類HomeTheaterFacade的ready,play,end方法操作了播放器,投影儀等的打開,關閉,對于家庭影院外觀類來說,他是不需要知道播放器,投影儀等的打開,關閉具體是怎么樣實現的。在一定程度上實現了解耦,易維護和擴展。

    總結

    優(yōu)勢:

    1.外觀模式對外屏蔽了子系統(tǒng)的實現細節(jié)(安全性)

    2.外觀模式降低了客戶端與子系統(tǒng)交互的復雜性,對客戶端和子系統(tǒng)進行解耦合,子系統(tǒng)內部的模塊更容易維護和擴展

    3.通過合理的使用外觀模式,可以幫助我們更好的劃分訪問層次

    使用場景

    1.對分層的系統(tǒng)進行構建時,使用外觀模式可以簡化子系統(tǒng)之間的依賴關系

    2.當有一個復雜的系統(tǒng),里面有很多子系統(tǒng),有大量的操作,這時候可以使用外觀模式

    3.當客戶端與多個子系統(tǒng)之間存在很多耦合時,引入外觀模式,可以將他們分離,提高子系統(tǒng)的獨立性和可移植性

    “Java外觀模式示例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI