一模式定義
外觀模式,是軟件工程師常用的一種軟件設(shè)計模式。它為子系統(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糖醋排骨實現(xiàn)類一Spareribs
- package com.demo.common;
-
- /**
- *
- * 糖醋排骨實現(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.炒鍋注油燒至六成熱,下排骨炸至淡黃色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出...");
- }
-
- // 調(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外觀實現(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)建糖醋排骨對象實例
- // 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.炒鍋注油燒至六成熱,下排骨炸至淡黃色撈出;油溫加熱至八成,再下鍋炸至金黃色撈出...
4.炒鍋留少許油燒熱,下入蔥花,姜末爆香,加入適量清水、醬油、醋、白糖、料酒、倒入排骨,燒開后用慢火煨至湯汁濃,排骨熟,淋上熟油,出鍋即可!
==== 糖醋排骨制作完成!
三該模式設(shè)計原則
1 迪米特法則——最小知識原則
2 封裝變化部分
該圖進(jìn)一步展示了客戶端應(yīng)用程序,外觀模式和子系統(tǒng)內(nèi)部復(fù)雜應(yīng)用三者的關(guān)系.
四使用場合
1 一個軟件系統(tǒng)的復(fù)雜度比較高,需要一個更高級別的簡單接口簡化對子系統(tǒng)的操作時。
2 當(dāng)使用端與實現(xiàn)類之間有太多的依賴性,需要降低使用端與子系統(tǒng)或子系統(tǒng)間的耦合性,增加子系統(tǒng)的獨(dú)立性時。
3當(dāng)子系統(tǒng)是相互依存的,需要層級化子系統(tǒng),簡化子系統(tǒng)之間的相依性的時候,可以使用外觀模式。
五 外觀模式靜態(tài)類圖
|