最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式中的外觀模式詳解

 更新時間:2022年07月19日 10:32:59   作者:愛學習的大魚???????  
這篇文章主要介紹了Java設計模式中的外觀模式詳解,外觀模式也叫“過程模式,外觀模式為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用

模式介紹

  • 外觀模式(Facade) ,也叫“過程模式:外觀模式為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
  • 外觀模式通過定義一個一致的接口,用以屏蔽內部子系統(tǒng)的細節(jié),使得調用端只需跟這個接口發(fā)生調用,而無需關心這個子系統(tǒng)的內部細節(jié)。

UML類圖

類圖解析:

  • Facade:為調用端提供統(tǒng)一的調用接口,外觀類知道哪些子系統(tǒng)負責處理請求,從而將調用端的請求代理給適當子系統(tǒng)對象。
  • Client:外觀接口的調用者。
  • SubSystem集合:指模塊或者子系統(tǒng),處理Facade對象指派的任務,他是功能的實際提供者。

外觀模式案例:

背景介紹:

組建一個家庭影院:DVD播放器、投影儀、自動屏幕、環(huán)繞立體聲、爆米花機,要求完成使用家庭影院的功能,通過直接用遙控器(統(tǒng)籌各設備開關)進行控制,其過程為:

  • 開爆米花機
  • 放下屏幕
  • 開投影儀
  • 開音響
  • 開DVD,選dvd
  • 拿爆米花
  • 調暗燈光
  • 播放
  • 觀影結束后,關閉各種設備.

DVD、Popcorn、Projector、Screen、Stereo、TheaterLight代碼如下:

public class DVDPlayer {
    // 使用單例模式
    private static  final DVDPlayer instance = new DVDPlayer();
    private DVDPlayer() {}
    public static DVDPlayer getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("dvd 打開了...");
    }
    public void off() {
        System.out.println("dvd 關閉了...");
    }
    public void play() {
        System.out.println("dvd 播放中...");
    }
    public void pause() {
        System.out.println("dvd 暫停了...");
    }
}
public class Popcorn {
    private static final Popcorn instance = new Popcorn();
    private Popcorn(){}
    public static Popcorn getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("爆米花機打開了...");
    }
    public void off() {
        System.out.println("爆米花機關閉了...");
    }
    public void pop() {
        System.out.println("爆米花做好了...");
    }
}
public class Projector {
    private static final Projector instance = new Projector();
    private Projector(){}
    public static Projector getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("投影儀打開了...");
    }
    public void off() {
        System.out.println("投影儀關閉了...");
    }
    public void focus() {
        System.out.println("投影儀聚焦中...");
    }
}
public class Screen {
    private static final Screen instance = new Screen();
    private Screen(){}
    public static Screen getInstance() {
        return instance;
    }
    public void up() {
        System.out.println("屏幕上升...");
    }
    public void down() {
        System.out.println("屏幕下降...");
    }
}
public class Stereo {
    private static final Stereo instance = new Stereo();
    private Stereo(){}
    public static Stereo getInstance() {
        return instance;
    }
    public void on() {
        System.out.println("立體音響打開...");
    }
    public void off() {
        System.out.println("立體音響關閉...");
    }
    public void up() {
        System.out.println("立體音響音量+...");
    }
    public void down() {
        System.out.println("立體音響音量-...");
    }
}
public class TheaterLight {
    private static final TheaterLight instance = new TheaterLight();
    private TheaterLight(){}
    public static TheaterLight getInstance() {
        return instance;
    }

    public void on() {
        System.out.println("燈光打開...");
    }
    public void off() {
        System.out.println("燈光關閉...");
    }
    public void dim() {
        System.out.println("燈光亮度調暗...");
    }
    public void bright() {
        System.out.println("燈光亮度調亮...");
    }
}

HomeTheaterFacade(統(tǒng)籌各設備開關)

public class HomeTheaterFacade {
    private DVDPlayer dvdPlayer;
    private Popcorn popcorn;
    private Projector projector;
    private Stereo stereo;
    private Screen screen;
    private TheaterLight theaterLight;
    public HomeTheaterFacade() {
        this.dvdPlayer = DVDPlayer.getInstance();
        this.popcorn = Popcorn.getInstance();
        this.projector = Projector.getInstance();
        this.stereo = Stereo.getInstance();
        this.screen = Screen.getInstance();
        this.theaterLight = TheaterLight.getInstance();
    }

    /**
     * 準備開始
     */
    public void ready() {
        popcorn.on();
        popcorn.pop();
        screen.down();
        projector.on();
        projector.focus();
        stereo.on();
        dvdPlayer.on();
        theaterLight.dim();
    }

    /**
     * 播放
     */
    public void play() {
        dvdPlayer.play();
    }

    /**
     * 暫停
     */
    public void pause() {
        dvdPlayer.pause();
    }

    /**
     * 結束
     */
    public void end() {
        popcorn.off();
        theaterLight.bright();
        screen.up();
        projector.off();
        stereo.off();
        dvdPlayer.off();
    }
}

Client(測試)

public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
        System.out.println("----------準備開始-----------");
        homeTheaterFacade.ready();
        System.out.println("----------開始播放-----------");
        homeTheaterFacade.play();
        System.out.println("----------播放暫停-----------");
        homeTheaterFacade.pause();
        System.out.println("----------播放結束-----------");
        homeTheaterFacade.end();
    }
}

實現(xiàn)結果:

外觀模式的注意事項和細節(jié)

  • 外觀模式對外屏蔽了子系統(tǒng)的細節(jié),因此外觀模式降低了客戶端對子系統(tǒng)使用的復雜性。
  • 外觀模式對客戶端與子系統(tǒng)的耦合關系-解耦,讓子系統(tǒng)內部的模塊更易維護和擴展
  • 通過合理的使用外觀模式,可以幫我們更好的劃分訪問的層次。
  • 當系統(tǒng)需要進行分層設計時,可以考慮使用Facade模式。
  • 在維護一個遺留的大型系統(tǒng)時,可能這個系統(tǒng)已經(jīng)變得非常難以維護和擴展,此時可以考慮為新系統(tǒng)開發(fā)一個Facade類,來提供遺留系統(tǒng)的比較清晰簡單的接口,讓新系統(tǒng)與Facade類交互,提高復用性。
  • 不能過多的或者不合理的使用外觀模式,使用外觀模式好,還是直接調用模塊好。要以讓系統(tǒng)有層次,利于維護為目的。

到此這篇關于Java設計模式中的外觀模式詳解的文章就介紹到這了,更多相關Java外觀模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • kaptcha驗證碼組件使用簡介解析

    kaptcha驗證碼組件使用簡介解析

    這篇文章主要介紹了kaptcha驗證碼組件使用簡介解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 使用MyBatis攔截器實現(xiàn)SQL的完整打印

    使用MyBatis攔截器實現(xiàn)SQL的完整打印

    當我們使用Mybatis結合Mybatis-plus進行開發(fā)時,為了查看執(zhí)行sql的信息通常我們可以通過屬性配置的方式打印出執(zhí)行的sql語句,但這樣的打印出了sql語句常帶有占位符信息,不利于排錯,所以本文介紹了構建MyBatis攔截器,實現(xiàn)SQL的完整打印,需要的朋友可以參考下
    2024-07-07
  • Springboot項目的服務器部署與發(fā)布方式

    Springboot項目的服務器部署與發(fā)布方式

    本文記錄了將Springboot項目部署到服務器并發(fā)布的過程,包括在IDEA中打包、選擇服務器、連接服務器、安裝環(huán)境、上傳jar包、配置環(huán)境變量以及運行項目等步驟
    2025-03-03
  • 解決IDEA顯示非法字符 \ufeff 的問題

    解決IDEA顯示非法字符 \ufeff 的問題

    這篇文章主要介紹了解決IDEA顯示非法字符 \ufeff 的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java利用棧實現(xiàn)簡易計算器功能

    Java利用棧實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了Java利用棧實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot事件機制相關知識點匯總

    SpringBoot事件機制相關知識點匯總

    這篇文章主要介紹了SpringBoot事件機制相關知識點匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Spring中@Value設置默認值問題解決

    Spring中@Value設置默認值問題解決

    本文主要介紹了Spring中@Value設置默認值問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java集合之HashMap用法詳解

    Java集合之HashMap用法詳解

    這篇文章主要介紹了Java集合之HashMap用法,結合實例形式分析了java map集合中HashMap定義、遍歷等相關操作技巧,需要的朋友可以參考下
    2017-05-05
  • 探究Java中Integer緩沖區(qū)底層原理

    探究Java中Integer緩沖區(qū)底層原理

    本文將會給大家講一講Integer這個包裝類的底層原理。在現(xiàn)在的就業(yè)環(huán)境下,我們需要知其然,還要知其所以然,才能更好地滿足就業(yè)需求,感興趣的小伙伴可以參考閱讀
    2023-05-05
  • Springboot JPA打印SQL語句及參數(shù)的實現(xiàn)

    Springboot JPA打印SQL語句及參數(shù)的實現(xiàn)

    在SpringBoot項目中調試和優(yōu)化數(shù)據(jù)庫操作是很常見的需求,本文主要介紹了Springboot JPA打印SQL語句及參數(shù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06

最新評論

同心县| 云梦县| 柳林县| 五家渠市| 班戈县| 额尔古纳市| 罗平县| 阿克苏市| 香港 | 收藏| 呼和浩特市| 会昌县| 汝州市| 名山县| 德保县| 瑞昌市| 宝清县| 灵丘县| 东乡族自治县| 逊克县| 高邮市| 云林县| 牟定县| 建宁县| 孟村| 稻城县| 潜山县| 密云县| 黄石市| 阳原县| 巴塘县| 庆安县| 自治县| 淄博市| 漾濞| 长汀县| 鹤峰县| 河间市| 福安市| 江陵县| 福贡县|