Java基于外觀模式實(shí)現(xiàn)美食天下食譜功能實(shí)例詳解
本文實(shí)例講述了Java基于外觀模式實(shí)現(xiàn)美食天下食譜功能。分享給大家供大家參考,具體如下:
一、模式定義
外觀模式,是軟件工程師常用的一種軟件設(shè)計(jì)模式。它為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的高層接口,使子系統(tǒng)更容易使用。外觀模式通過(guò)一個(gè)外觀接口讀/寫(xiě)子系統(tǒng)中的各接口的數(shù)據(jù)資源,而客戶可以通過(guò)外觀接口讀取內(nèi)部資源庫(kù),不與子系統(tǒng)產(chǎn)生交互。
二、模式舉例
1. 模式分析
我們借用美食天下菜譜中制作糖醋排骨這一道菜來(lái)說(shuō)明這一模式。

2. 外觀模式靜態(tài)類(lè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)類(lèi)一Spareribs
package com.demo.common;
/**
*
* 糖醋排骨實(shí)現(xiàn)類(lèi)
*
* @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厘米長(zhǎng)段,用開(kāi)水汆一下,撈出放盆內(nèi),加入鹽、醬油腌入味...");
}
// 炸排骨
@Override
public void fry() {
System.out.println("3.炒鍋?zhàn)⒂蜔亮蔁?,下排骨炸至淡黃色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出...");
}
// 調(diào)汁
@Override
public void juice() {
System.out
.println("4.炒鍋留少許油燒熱,下入蔥花,姜末爆香,加入適量清水、醬油、醋、白糖、料酒、倒入排骨,燒開(kāi)后用慢火煨至湯汁濃,排骨熟,淋上熟油,出鍋即可!");
}
}
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 客戶端測(cè)試
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) {
// 開(kāi)始做糖醋排骨了!
System.out.println("==== 開(kāi)始做糖醋排骨...");
// // 創(chuàng)建糖醋排骨對(duì)象實(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é)果
==== 開(kāi)始做糖醋排骨...
1.準(zhǔn)備豬排骨500克,蔥末、姜末、醬油、花生油、白糖、醋、料酒、鹽各適量...
2.將排骨洗凈剁成3厘米長(zhǎng)段,用開(kāi)水汆一下,撈出放盆內(nèi),加入鹽、醬油腌入味...
3.炒鍋?zhàn)⒂蜔亮蔁?,下排骨炸至淡黃色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出...
4.炒鍋留少許油燒熱,下入蔥花,姜末爆香,加入適量清水、醬油、醋、白糖、料酒、倒入排骨,燒開(kāi)后用慢火煨至湯汁濃,排骨熟,淋上熟油,出鍋即可!
==== 糖醋排骨制作完成!
三、該模式設(shè)計(jì)原則
1 迪米特法則——最小知識(shí)原則
2 封裝變化部分

該圖進(jìn)一步展示了客戶端應(yīng)用程序,外觀模式和子系統(tǒng)內(nèi)部復(fù)雜應(yīng)用三者的關(guān)系.
四、使用場(chǎng)合
1. 一個(gè)軟件系統(tǒng)的復(fù)雜度比較高,需要一個(gè)更高級(jí)別的簡(jiǎn)單接口簡(jiǎn)化對(duì)子系統(tǒng)的操作時(shí)。
2. 當(dāng)使用端與實(shí)現(xiàn)類(lèi)之間有太多的依賴(lài)性,需要降低使用端與子系統(tǒng)或子系統(tǒng)間的耦合性,增加子系統(tǒng)的獨(dú)立性時(shí)。
3. 當(dāng)子系統(tǒng)是相互依存的,需要層級(jí)化子系統(tǒng),簡(jiǎn)化子系統(tǒng)之間的相依性的時(shí)候,可以使用外觀模式。
五、外觀模式靜態(tài)類(lèi)圖

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠與抽象工廠模式的使用實(shí)例
- Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式
- 實(shí)例解析Java單例模式編程中對(duì)抽象工廠模式的運(yùn)用
- Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例詳解
- Java基于中介者模式實(shí)現(xiàn)多人聊天室功能示例
- Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能示例
- Java使用訪問(wèn)者模式解決公司層級(jí)結(jié)構(gòu)圖問(wèn)題詳解
- Java基于代理模式解決紅酒經(jīng)銷(xiāo)問(wèn)題詳解
- Java使用責(zé)任鏈模式處理學(xué)生請(qǐng)假問(wèn)題詳解
- Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解
相關(guān)文章
SpringBoot整合TomCat實(shí)現(xiàn)本地圖片服務(wù)器代碼解析
這篇文章主要介紹了SpringBoot整合TomCat實(shí)現(xiàn)本地圖片服務(wù)器代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
JAVA簡(jiǎn)單實(shí)現(xiàn)MD5注冊(cè)登錄加密實(shí)例代碼
本篇文章主要介紹了JAVA簡(jiǎn)單實(shí)現(xiàn)MD5注冊(cè)登錄加密實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
一文搞懂Java中對(duì)象池的實(shí)現(xiàn)
池化并不是什么新鮮的技術(shù),它更像一種軟件設(shè)計(jì)模式,主要功能是緩存一組已經(jīng)初始化的對(duì)象,以供隨時(shí)可以使用。本文將為大家詳細(xì)講講Java中對(duì)象池的實(shí)現(xiàn),需要的可以參考一下2022-07-07
Spring IOC源碼之bean的注冊(cè)過(guò)程講解
這篇文章主要介紹了Spring IOC源碼之bean的注冊(cè)過(guò)程講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Win10?IDEA如何連接虛擬機(jī)中的Hadoop(HDFS)
在虛擬機(jī)上配置Hadoop并修改core-site.xml文件,設(shè)置IP為局域網(wǎng)地址,IDEA中創(chuàng)建Maven項(xiàng)目,添加依賴(lài),并檢查Hadoop重啟和端口轉(zhuǎn)發(fā),提供test.bat文件,通過(guò)修改IP簡(jiǎn)化使用過(guò)程2024-11-11
使用?mybatis?自定義日期類(lèi)型轉(zhuǎn)換器的示例代碼
這篇文章主要介紹了使用?mybatis?自定義日期類(lèi)型轉(zhuǎn)換器的示例代碼,這里使用mybatis中的typeHandlers?實(shí)現(xiàn)的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
單一職責(zé)原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了單一職責(zé)原則的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
java聯(lián)系人管理系統(tǒng)簡(jiǎn)單設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了java聯(lián)系人管理系統(tǒng)簡(jiǎn)單設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

