Java基于外觀模式實(shí)現(xiàn)美食天下食譜功能實(shí)例詳解
本文實(shí)例講述了Java基于外觀模式實(shí)現(xiàn)美食天下食譜功能。分享給大家供大家參考,具體如下:
一、模式定義
外觀模式,是軟件工程師常用的一種軟件設(shè)計(jì)模式。它為子系統(tǒng)中的一組接口提供一個統(tǒng)一的高層接口,使子系統(tǒng)更容易使用。外觀模式通過一個外觀接口讀/寫子系統(tǒng)中的各接口的數(shù)據(jù)資源,而客戶可以通過外觀接口讀取內(nèi)部資源庫,不與子系統(tǒng)產(chǎn)生交互。
二、模式舉例
1. 模式分析
我們借用美食天下菜譜中制作糖醋排骨這一道菜來說明這一模式。
2. 外觀模式靜態(tài)類圖
3. 代碼示例
3.1 創(chuàng)建糖醋排骨接口一ISpareribs
package com.demo.common; /** * 糖醋排骨接口 * * @author * */ public interface ISpareribs { // 準(zhǔn)備材料 public void prepair(); // 腌制排骨 public void preserve(); // 炸排骨 public void fry(); // 調(diào)汁 public void juice(); }
3.2 糖醋排骨實(shí)現(xiàn)類一Spareribs
package com.demo.common; /** * * 糖醋排骨實(shí)現(xiàn)類 * * @author * */ public class Spareribs implements ISpareribs { // 準(zhǔn)備材料 @Override public void prepair() { System.out.println("1.準(zhǔn)備豬排骨500克,蔥末、姜末、醬油、花生油、白糖、醋、料酒、鹽各適量..."); } // 腌制排骨 @Override public void preserve() { System.out.println("2.將排骨洗凈剁成3厘米長段,用開水汆一下,撈出放盆內(nèi),加入鹽、醬油腌入味..."); } // 炸排骨 @Override public void fry() { System.out.println("3.炒鍋?zhàn)⒂蜔亮蔁幔屡殴钦ㄖ恋S色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出..."); } // 調(diào)汁 @Override public void juice() { System.out .println("4.炒鍋留少許油燒熱,下入蔥花,姜末爆香,加入適量清水、醬油、醋、白糖、料酒、倒入排骨,燒開后用慢火煨至湯汁濃,排骨熟,淋上熟油,出鍋即可!"); } }
3.3 創(chuàng)建外觀接口一ICookFacade
package com.demo.facade; /** * 外觀模式制作糖醋排骨 * * @author * */ public interface ICookFacade { // 做糖醋排骨 public void cookSpareribs(); }
3.4 外觀實(shí)現(xiàn)一CookFacade
package com.demo.facade; import com.demo.common.ISpareribs; import com.demo.common.Spareribs; /** * 外觀模式制作糖醋排骨 * * @author * */ public class CookFacade implements ICookFacade { // 糖醋排骨排骨接口 private final ISpareribs spareribs = new Spareribs(); // 做糖醋排骨 public void cookSpareribs() { // 準(zhǔn)備材料 this.spareribs.prepair(); // 腌制排骨 this.spareribs.preserve(); // 炸排骨 this.spareribs.fry(); // 調(diào)汁 this.spareribs.juice(); } }
3.5 客戶端測試
package com.demo; import com.demo.facade.CookFacade; import com.demo.facade.ICookFacade; /** * 客戶端應(yīng)用程序 * * @author * */ public class Client { public static void main(String[] args) { // 開始做糖醋排骨了! System.out.println("==== 開始做糖醋排骨..."); // // 創(chuàng)建糖醋排骨對象實(shí)例 // ISpareribs spareribs = new Spareribs(); // // 準(zhǔn)備材料 // spareribs.prepair(); // // 腌制排骨 // spareribs.preserve(); // // 炸排骨 // spareribs.fry(); // // 調(diào)汁 // spareribs.juice(); ICookFacade cookFacade = new CookFacade(); cookFacade.cookSpareribs(); System.out.println("==== 糖醋排骨制作完成!"); } }
4. 運(yùn)行結(jié)果
==== 開始做糖醋排骨...
1.準(zhǔn)備豬排骨500克,蔥末、姜末、醬油、花生油、白糖、醋、料酒、鹽各適量...
2.將排骨洗凈剁成3厘米長段,用開水汆一下,撈出放盆內(nèi),加入鹽、醬油腌入味...
3.炒鍋?zhàn)⒂蜔亮蔁?,下排骨炸至淡黃色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出...
4.炒鍋留少許油燒熱,下入蔥花,姜末爆香,加入適量清水、醬油、醋、白糖、料酒、倒入排骨,燒開后用慢火煨至湯汁濃,排骨熟,淋上熟油,出鍋即可!
==== 糖醋排骨制作完成!
三、該模式設(shè)計(jì)原則
1 迪米特法則——最小知識原則
2 封裝變化部分
該圖進(jìn)一步展示了客戶端應(yīng)用程序,外觀模式和子系統(tǒng)內(nèi)部復(fù)雜應(yīng)用三者的關(guān)系.
四、使用場合
1. 一個軟件系統(tǒng)的復(fù)雜度比較高,需要一個更高級別的簡單接口簡化對子系統(tǒng)的操作時(shí)。
2. 當(dāng)使用端與實(shí)現(xiàn)類之間有太多的依賴性,需要降低使用端與子系統(tǒng)或子系統(tǒng)間的耦合性,增加子系統(tǒng)的獨(dú)立性時(shí)。
3. 當(dāng)子系統(tǒng)是相互依存的,需要層級化子系統(tǒng),簡化子系統(tǒng)之間的相依性的時(shí)候,可以使用外觀模式。
五、外觀模式靜態(tài)類圖
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
- Java設(shè)計(jì)模式編程中簡單工廠與抽象工廠模式的使用實(shí)例
- Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式
- 實(shí)例解析Java單例模式編程中對抽象工廠模式的運(yùn)用
- Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例詳解
- Java基于中介者模式實(shí)現(xiàn)多人聊天室功能示例
- Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能示例
- Java使用訪問者模式解決公司層級結(jié)構(gòu)圖問題詳解
- Java基于代理模式解決紅酒經(jīng)銷問題詳解
- Java使用責(zé)任鏈模式處理學(xué)生請假問題詳解
- Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解
相關(guān)文章
SpringBoot定時(shí)任務(wù)的實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringBoot定時(shí)任務(wù)的實(shí)現(xiàn)詳解,定時(shí)任務(wù)是企業(yè)級開發(fā)中最常見的功能之一,如定時(shí)統(tǒng)計(jì)訂單數(shù)、數(shù)據(jù)庫備份、定時(shí)發(fā)送短信和郵件、定時(shí)統(tǒng)計(jì)博客訪客等,簡單的定時(shí)任務(wù)可以直接通過Spring中的@Scheduled注解來實(shí)現(xiàn),需要的朋友可以參考下2024-01-01mybatis如何實(shí)現(xiàn)的數(shù)據(jù)庫排序
這篇文章主要介紹了mybatis如何實(shí)現(xiàn)的數(shù)據(jù)庫排序,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot繼承LogStash實(shí)現(xiàn)日志收集的方法示例
這篇文章主要介紹了SpringBoot繼承LogStash實(shí)現(xiàn)日志收集的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05spring定時(shí)器定時(shí)任務(wù)到時(shí)間未執(zhí)行問題的解決
這篇文章主要介紹了spring定時(shí)器定時(shí)任務(wù)到時(shí)間未執(zhí)行問題的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Spring?Boot?如何通過ServletRequestHandledEvent事件實(shí)現(xiàn)接口請求的性能監(jiān)控
在Spring框架中,監(jiān)控接口請求的性能可以通過ServletRequestHandledEvent事件實(shí)現(xiàn),這篇文章給大家介紹Spring?Boot?如何通過ServletRequestHandledEvent事件實(shí)現(xiàn)接口請求的性能監(jiān)控,感興趣的朋友跟隨小編一起看看吧2024-08-08