欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之外觀模式示例詳解

 更新時(shí)間:2022年03月02日 16:54:33   作者:溫故知新之java  
外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無(wú)須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)。本文將通過(guò)示例詳細(xì)為大家講解一下外觀模式,需要的可以參考一下

定義

外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無(wú)須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)

案例

需求

看電影的時(shí)候需要進(jìn)行一系列的操作,比如打開(kāi)播放器,放下屏幕,打開(kāi)投影儀,打開(kāi)音響等,這個(gè)要怎么進(jìn)行管理呢

方案:外觀模式實(shí)現(xiàn)

定義播放器類(lèi)

public class Player {

    private static Player player = new Player();

    private Player(){}

    public static Player getInstance(){

        return player;
    }

    public void on(){
        System.out.println("打開(kāi)播放器");
    }

    public void off(){
        System.out.println("關(guān)閉播放器");
    }

    public void play(){
        System.out.println("使用播放器播放電影");
    }

    public void pause(){
        System.out.println("暫停播放器");
    }

    public void select(){
        System.out.println("選擇喜歡的電影");
    }
}

定義投影儀類(lèi)

public class Projector {

    private static Projector projector = new Projector();

    private Projector(){}

    public static Projector getInstance(){

        return projector;
    }

    public void on(){
        System.out.println("放下屏幕,打開(kāi)投影儀");
    }

    public void off(){
        System.out.println("關(guān)閉投影儀");
    }

    public void focus(){
        System.out.println("調(diào)節(jié)投影儀焦距");
    }

    public void zoom(){
        System.out.println("投影儀變焦");
    }

}

定義音響類(lèi)

public class Stereo {

    private static Stereo stereo = new Stereo();

    private Stereo(){}

    public static Stereo getInstance(){
        return stereo;
    }

    public void on(){
        System.out.println("打開(kāi)音響");
    }

    public void off(){
        System.out.println("關(guān)閉音響");
    }

    public void setVolume(){
        System.out.println("調(diào)節(jié)音響音量");
    }
}

定義爆米花機(jī)類(lèi)

/**
 * 爆米花機(jī)
 * @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("打開(kāi)爆米花機(jī)");
    }

    public void off(){
        System.out.println("關(guān)閉爆米花機(jī)");
    }

    public void pop(){
        System.out.println("制作爆米花");
    }
}

定義家庭影院外觀類(lèi)

public class HomeTheaterFacade {

    // 聚合各個(gè)子系統(tǒng)
    private Player player;

    private Popcorn popcorn;

    private Projector projector;

    private Stereo stereo;

    public HomeTheaterFacade(){

    }

    // 全參構(gòu)造器
    public HomeTheaterFacade(Player player, Popcorn popcorn,Projector projector,Stereo stereo){
        this.player = player;
        this.popcorn = popcorn;
        this.projector = projector;
        this.stereo = stereo;
    }

    // 準(zhǔn)備階段
    public void ready(){
        popcorn.on();
        player.on();
        projector.on();
        stereo.on();
    }

    // 播放
    public void play(){
        player.select();
        popcorn.pop();
        projector.focus();
        stereo.setVolume();
    }

    // 結(jié)束
    public void end(){
        player.off();
        popcorn.off();
        projector.off();
        stereo.off();
    }
}

定義測(cè)試類(lèi)

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

查看測(cè)試結(jié)果

分析

我們通過(guò)家庭影院外觀類(lèi)HomeTheaterFacade的ready,play,end方法操作了播放器,投影儀等的打開(kāi),關(guān)閉,對(duì)于家庭影院外觀類(lèi)來(lái)說(shuō),他是不需要知道播放器,投影儀等的打開(kāi),關(guān)閉具體是怎么樣實(shí)現(xiàn)的。在一定程度上實(shí)現(xiàn)了解耦,易維護(hù)和擴(kuò)展。

總結(jié)

優(yōu)勢(shì):

1.外觀模式對(duì)外屏蔽了子系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié)(安全性)

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

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

使用場(chǎng)景

1.對(duì)分層的系統(tǒng)進(jìn)行構(gòu)建時(shí),使用外觀模式可以簡(jiǎn)化子系統(tǒng)之間的依賴關(guān)系

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

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

以上就是Java設(shè)計(jì)模式之外觀模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java外觀模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java處理不可見(jiàn)特殊字符要點(diǎn)解析

    Java處理不可見(jiàn)特殊字符要點(diǎn)解析

    這篇文章主要介紹了Java處理不可見(jiàn)特殊字符要點(diǎn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析

    這篇文章主要介紹了Java自然排序Comparable使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot深入探究四種靜態(tài)資源訪問(wèn)的方式

    SpringBoot深入探究四種靜態(tài)資源訪問(wèn)的方式

    這一節(jié)詳細(xì)的學(xué)習(xí)一下SpringBoot的靜態(tài)資源訪問(wèn)相關(guān)的知識(shí)點(diǎn)。像這樣的知識(shí)點(diǎn)還挺多,比如SpringBoot2的Junit單元測(cè)試等等。本章我們來(lái)了解靜態(tài)資源訪問(wèn)的四種方式
    2022-05-05
  • 一文探索Apache HttpClient如何設(shè)定超時(shí)時(shí)間

    一文探索Apache HttpClient如何設(shè)定超時(shí)時(shí)間

    Apache HttpClient是一個(gè)流行的Java庫(kù),用于發(fā)送HTTP請(qǐng)求,這篇文章主要為大家介紹了Apache HttpClient如何設(shè)定超時(shí)時(shí)間,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-10-10
  • 樹(shù)莓派.GPRS.短信接收器

    樹(shù)莓派.GPRS.短信接收器

    這篇文章主要介紹了樹(shù)莓派.GPRS.短信接收器的相關(guān)知識(shí),需要的朋友可以參考下
    2017-10-10
  • Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼

    Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼

    泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。本文將利用泛型實(shí)現(xiàn)簡(jiǎn)單的棧結(jié)構(gòu),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • java圖形化界面實(shí)現(xiàn)簡(jiǎn)單混合運(yùn)算計(jì)算器的示例代碼

    java圖形化界面實(shí)現(xiàn)簡(jiǎn)單混合運(yùn)算計(jì)算器的示例代碼

    這篇文章主要介紹了java圖形化界面實(shí)現(xiàn)簡(jiǎn)單混合運(yùn)算計(jì)算器的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 深度剖析Java中的內(nèi)存原型及工作原理

    深度剖析Java中的內(nèi)存原型及工作原理

    這篇文章主要介紹了深度剖析Java中的內(nèi)存原型及工作原理,本文講解了java虛擬機(jī)內(nèi)存原型、常量池、Java內(nèi)存分配中的棧、Java內(nèi)存分配中的堆等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建步驟

    Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建步驟

    這篇文章主要介紹了Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建,集群環(huán)境至少需要3個(gè)節(jié)點(diǎn),1個(gè)Master,2個(gè)Slave,節(jié)點(diǎn)之間局域網(wǎng)連接,可以相互ping通,本文通過(guò)實(shí)例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • SpringBoot搭建多數(shù)據(jù)源的實(shí)現(xiàn)方法

    SpringBoot搭建多數(shù)據(jù)源的實(shí)現(xiàn)方法

    說(shuō)起多數(shù)據(jù)源,一般都來(lái)解決那些問(wèn)題呢,主從模式或者業(yè)務(wù)比較復(fù)雜需要連接不同的分庫(kù)來(lái)支持業(yè)務(wù)。本文主要介紹了SpringBoot搭建多數(shù)據(jù)源的實(shí)現(xiàn)方法,感興趣的可以了解一下,感興趣的可以額了解一下
    2021-12-12

最新評(píng)論