Java設(shè)計(jì)模式之外觀模式示例詳解
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)中的類打交道,用戶類和外觀類打交道,簡化了用戶類和子系統(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)文章
Java中List與數(shù)組之間的相互轉(zhuǎn)換
在日常Java學(xué)習(xí)或項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到需要int[]數(shù)組和List列表相互轉(zhuǎn)換的場(chǎng)景,然而往往一時(shí)難以想到有哪些方法,最后可能會(huì)使用暴力逐個(gè)轉(zhuǎn)換法,往往不是我們所滿意的,下面這篇文章主要給大家介紹了關(guān)于Java中List與數(shù)組之間的相互轉(zhuǎn)換,需要的朋友可以參考下2023-05-05Java中實(shí)現(xiàn)Comparable和Comparator對(duì)象比較
這篇文章主要針對(duì)Java中Comparable和Comparator對(duì)象進(jìn)行比較,感興趣的小伙伴們可以參考一下2016-02-02java利用phantomjs進(jìn)行截圖實(shí)例教程
PlantomJs是一個(gè)基于javascript的webkit內(nèi)核無頭瀏覽器 也就是沒有顯示界面的瀏覽器,你可以在基于 webkit 瀏覽器做的事情,它都能做到。下面這篇文章主要給大家介紹了關(guān)于java利用phantomjs進(jìn)行截圖的相關(guān)資料,需要的朋友可以參考下2018-10-10Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)
這篇文章主要介紹了Java 添加、刪除、替換、格式化Word中的文本(基于Spire.Cloud.SDK for Java),本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java線程安全和鎖Synchronized知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于Java線程安全和鎖Synchronized相關(guān)知識(shí)點(diǎn),有需要的朋友們可以參考下。2019-08-08idea 隱藏target,iml等不需要展示的文件(推薦)
這篇文章主要介紹了idea 隱藏target,iml等不需要展示的文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11