分享

外观模式——美食天下

 WindySky 2018-02-25

一模式定义

外观模式,是软件工程师常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口,使子系统更容易使用。外观模式通过一个外观接口读/写子系统中的各接口的数据资源,而客户可以通过外观接口读取内部资源库,不与子系统产生交互。

 

二模式举例

1模式分析

我们借用美食天下菜谱中制作糖醋排骨这一道菜来说明这一模式。



 

2外观模式静态类图


 

3代码示例

3.1创建糖醋排骨接口一ISpareribs

Java代码  收藏代码
  1. package com.demo.common;  
  2.   
  3. /** 
  4.  * 糖醋排骨接口 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public interface ISpareribs {  
  10.     // 准备材料  
  11.     public void prepair();  
  12.   
  13.     // 腌制排骨  
  14.     public void preserve();  
  15.   
  16.     // 炸排骨  
  17.     public void fry();  
  18.   
  19.     // 调汁  
  20.     public void juice();  
  21.   
  22. }  

3.2糖醋排骨实现类一Spareribs

Java代码  收藏代码
  1. package com.demo.common;  
  2.   
  3. /** 
  4.  *  
  5.  * 糖醋排骨实现类 
  6.  *  
  7.  * @author 
  8.  *  
  9.  */  
  10. public class Spareribs implements ISpareribs {  
  11.     // 准备材料  
  12.     @Override  
  13.     public void prepair() {  
  14.         System.out.println("1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...");  
  15.     }  
  16.   
  17.     // 腌制排骨  
  18.     @Override  
  19.     public void preserve() {  
  20.         System.out.println("2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...");  
  21.     }  
  22.   
  23.     // 炸排骨  
  24.     @Override  
  25.     public void fry() {  
  26.         System.out.println("3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...");  
  27.     }  
  28.   
  29.     // 调汁  
  30.     @Override  
  31.     public void juice() {  
  32.         System.out  
  33.                 .println("4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!");  
  34.   
  35.     }  
  36.   
  37. }  

3.3创建外观接口一ICookFacade

Java代码  收藏代码
  1. package com.demo.facade;  
  2.   
  3. /** 
  4.  * 外觀模式制作糖醋排骨 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public interface ICookFacade {  
  10.     // 做糖醋排骨  
  11.     public void cookSpareribs();  
  12. }  

3.4外观实现一CookFacade

Java代码  收藏代码
  1. package com.demo.facade;  
  2.   
  3. import com.demo.common.ISpareribs;  
  4. import com.demo.common.Spareribs;  
  5.   
  6. /** 
  7.  * 外觀模式制作糖醋排骨 
  8.  *  
  9.  * @author 
  10.  *  
  11.  */  
  12. public class CookFacade implements ICookFacade {  
  13.     // 糖醋排骨排骨接口  
  14.     private final ISpareribs spareribs = new Spareribs();  
  15.   
  16.     // 做糖醋排骨  
  17.     public void cookSpareribs() {  
  18.         // 准备材料  
  19.         this.spareribs.prepair();  
  20.         // 腌制排骨  
  21.         this.spareribs.preserve();  
  22.         // 炸排骨  
  23.         this.spareribs.fry();  
  24.         // 调汁  
  25.         this.spareribs.juice();  
  26.     }  
  27. }  

3.5客户端测试

Java代码  收藏代码
  1. package com.demo;  
  2.   
  3. import com.demo.facade.CookFacade;  
  4. import com.demo.facade.ICookFacade;  
  5.   
  6. /** 
  7.  * 客户端应用程序 
  8.  *  
  9.  * @author 
  10.  *  
  11.  */  
  12. public class Client {  
  13.     public static void main(String[] args) {  
  14.         // 开始做糖醋排骨了!  
  15.         System.out.println("==== 开始做糖醋排骨...");  
  16.         // // 创建糖醋排骨对象实例  
  17.         // ISpareribs spareribs = new Spareribs();  
  18.         // // 准备材料  
  19.         // spareribs.prepair();  
  20.         // // 腌制排骨  
  21.         // spareribs.preserve();  
  22.         // // 炸排骨  
  23.         // spareribs.fry();  
  24.         // // 调汁  
  25.         // spareribs.juice();  
  26.   
  27.         ICookFacade cookFacade = new CookFacade();  
  28.         cookFacade.cookSpareribs();  
  29.         System.out.println("==== 糖醋排骨制作完成!");  
  30.     }  
  31. }  

4运行结果

==== 开始做糖醋排骨...

1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...

2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...

3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...

4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!

==== 糖醋排骨制作完成!

 

三该模式设计原则

1 迪米特法则——最小知识原则

2 封装变化部分



 该图进一步展示了客户端应用程序,外观模式和子系统内部复杂应用三者的关系.

 

四使用场合

1 一个软件系统的复杂度比较高,需要一个更高级别的简单接口简化对子系统的操作时。

2 当使用端与实现类之间有太多的依赖性,需要降低使用端与子系统或子系统间的耦合性,增加子系统的独立性时。

3当子系统是相互依存的,需要层级化子系统,简化子系统之间的相依性的时候,可以使用外观模式。

 

五 外观模式静态类图



 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多