Java設(shè)計(jì)模式之外觀模式示例詳解
1.什么是外觀模式
當(dāng)一個(gè)用戶類需要和某個(gè)系統(tǒng)中的多個(gè)子系統(tǒng)打交道時(shí),為了避免該類和子系統(tǒng)中的類產(chǎn)生過(guò)多的依賴關(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)過(guò)多的依賴。
*/
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ò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java大文本并行計(jì)算實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java大文本并行計(jì)算如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot yaml語(yǔ)法與JRS303校驗(yàn)超詳細(xì)講解
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫(xiě)。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
springboot中使用jpa下hibernate的ddl-auto方式
這篇文章主要介紹了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的方法
這篇文章主要給大家介紹了關(guān)于Spring cloud踩坑記錄之使用feignclient遠(yuǎn)程調(diào)用服務(wù)404的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
MyBatis圖文并茂講解注解開(kāi)發(fā)一對(duì)多查詢
這篇文章主要介紹了SpringBoot中Mybatis注解一對(duì)多查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
SpringBoot+MinIO+KKFileView實(shí)現(xiàn)文件預(yù)覽功能
本文主要介紹了使用SpringBoot、MinIO和KKFileView實(shí)現(xiàn)文件上傳和在線預(yù)覽功能,通過(guò)配置MinIO存儲(chǔ)文件,并使用KKFileView生成預(yù)覽鏈接,感興趣的可以了解一下2024-11-11

