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

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

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

1.什么是外觀模式

當(dāng)一個(gè)用戶類需要和某個(gè)系統(tǒng)中的多個(gè)子系統(tǒng)打交道時(shí),為了避免該類和子系統(tǒng)中的類產(chǎn)生過多的依賴關(guān)系,可以采用外觀模式。外觀模式,為這些子系統(tǒng)提供一個(gè)外觀類進(jìn)行功能的封裝,外觀類負(fù)責(zé)和子系統(tǒng)中的類打交道,用戶類和外觀類打交道,簡(jiǎn)化了用戶類和子系統(tǒng)進(jìn)行交互和依賴。

2.如何實(shí)現(xiàn)

1)子系統(tǒng),是若干個(gè)類的集合,這些類協(xié)同為用戶提供所需的功能,子系統(tǒng)中的任何類都不包含外觀類的引用

2)外觀類(Facade),該類包含子系統(tǒng)中全部或部分類的實(shí)例引用。外觀類可以替代子系統(tǒng)中的類和用戶打打交道。

3.代碼實(shí)現(xiàn)

以一個(gè)廣告系統(tǒng)做案例,該系統(tǒng)包含CheckWord,Charge,TypeSeting三個(gè)子類。

AdFacade是這個(gè)子系的外觀類,負(fù)責(zé)和用戶類進(jìn)行交互,并調(diào)用子系統(tǒng)中的功能實(shí)現(xiàn)用戶需求。

1)子系統(tǒng)CheckWord

/**
 * 子系統(tǒng)1
 * 廣告檢查系統(tǒng)
 * 完成廣告字?jǐn)?shù)計(jì)算
 */
public class CheckWord {
    int amount;
    String ad;
    public CheckWord (String ad){
        this.ad = ad;
    }
    /**
     * 計(jì)算廣告字?jǐn)?shù),按字?jǐn)?shù)收費(fèi)
     * @return
     */
    public int setAmout( ){
        System.out.println("計(jì)算廣告字?jǐn)?shù)");
        amount = ad.length();
        return amount;
    }
}

2)Charge

/**
 * 子系統(tǒng)2
 * 計(jì)算廣告價(jià)格
 */
public class Charge {
    CheckWord word;
    public int price;
    public Charge(CheckWord word){
        this.word = word;
    }
    public int giveCharge( ){
        //計(jì)算廣告價(jià)格
        System.out.println("計(jì)算價(jià)格");
        price = word.amount*100;
        return price;
    }
}

3)TypeSetting

/**
 * 子系統(tǒng)3
 * 廣告排版
 */
public class TypeSetting {
    private String ad;
    public TypeSetting(String ad){
        this.ad = ad;
    }
    public void typeSetting(){
        System.out.println("廣告排版");
    }
}

4)外觀類

/**
 * 外觀類
 * 包含子系統(tǒng)中全部或部分類。
 * 這個(gè)類替代子系統(tǒng)和用戶類打交道,
 * 所有用戶想要完成的功能由這個(gè)類進(jìn)行調(diào)用,
 * 避免了用戶類和子系統(tǒng)過多的依賴。
 */
public class AdFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSetting typeSetting;
    public AdFacade(String ad){
        this.checkWord = new CheckWord(ad);
        this.charge = new Charge(checkWord);
        this.typeSetting = new TypeSetting(ad);
    }
    /**
     * 完成用戶發(fā)布廣告的任務(wù)
     */
    public void finishAdTask(){
        checkWord.setAmout();
        charge.giveCharge();
        typeSetting.typeSetting();
    }
}

5)測(cè)試類

public class Main {
    public static void main(String args[]){
        String ad ="hello world";
        AdFacade adFacade = new AdFacade(ad);
        adFacade.finishAdTask();
    }
}

到此這篇關(guān)于Java設(shè)計(jì)模式之外觀模式示例詳解的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis 在typeAliases別名時(shí)報(bào)錯(cuò)的解決

    mybatis 在typeAliases別名時(shí)報(bào)錯(cuò)的解決

    這篇文章主要介紹了mybatis 在typeAliases別名時(shí)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java大文本并行計(jì)算實(shí)現(xiàn)過程解析

    Java大文本并行計(jì)算實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java大文本并行計(jì)算如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot yaml語法與JRS303校驗(yàn)超詳細(xì)講解

    SpringBoot yaml語法與JRS303校驗(yàn)超詳細(xì)講解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • springboot中使用jpa下hibernate的ddl-auto方式

    springboot中使用jpa下hibernate的ddl-auto方式

    這篇文章主要介紹了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • spring初始化方法的執(zhí)行順序及其原理分析

    spring初始化方法的執(zhí)行順序及其原理分析

    這篇文章主要介紹了spring初始化方法的執(zhí)行順序及其原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java中數(shù)組的應(yīng)用及方法

    java中數(shù)組的應(yīng)用及方法

    本篇文章介紹了,java中數(shù)組的應(yīng)用及方法。需要的朋友參考下
    2013-04-04
  • Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的方法

    Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的方法

    這篇文章主要給大家介紹了關(guān)于Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • MyBatis圖文并茂講解注解開發(fā)一對(duì)多查詢

    MyBatis圖文并茂講解注解開發(fā)一對(duì)多查詢

    這篇文章主要介紹了SpringBoot中Mybatis注解一對(duì)多查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java JDBC導(dǎo)致的反序列化攻擊原理解析

    Java JDBC導(dǎo)致的反序列化攻擊原理解析

    這篇文章主要介紹了Java JDBC導(dǎo)致的反序列化攻擊原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot+MinIO+KKFileView實(shí)現(xiàn)文件預(yù)覽功能

    SpringBoot+MinIO+KKFileView實(shí)現(xiàn)文件預(yù)覽功能

    本文主要介紹了使用SpringBoot、MinIO和KKFileView實(shí)現(xiàn)文件上傳和在線預(yù)覽功能,通過配置MinIO存儲(chǔ)文件,并使用KKFileView生成預(yù)覽鏈接,感興趣的可以了解一下
    2024-11-11

最新評(píng)論

璧山县| 公安县| 永川市| 克什克腾旗| 施秉县| 铁岭县| 牟定县| 肇源县| 武陟县| 庄浪县| 阜新市| 南城县| 绩溪县| 和田市| 宁波市| 郸城县| 大埔县| 河池市| 道孚县| 隆德县| 大理市| 武冈市| 广东省| 望都县| 信宜市| 湖北省| 滕州市| 元阳县| 荔波县| 云梦县| 扬中市| 驻马店市| 房山区| 开化县| 古交市| 都昌县| 柳林县| 泸定县| 油尖旺区| 凯里市| 策勒县|