一模式定义
外观模式,是软件工程师常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口,使子系统更容易使用。外观模式通过一个外观接口读/写子系统中的各接口的数据资源,而客户可以通过外观接口读取内部资源库,不与子系统产生交互。
二模式举例
1模式分析
我们借用美食天下菜谱中制作糖醋排骨这一道菜来说明这一模式。
2外观模式静态类图
3代码示例
3.1创建糖醋排骨接口一ISpareribs
- package com.demo.common;
-
- /**
- * 糖醋排骨接口
- *
- * @author
- *
- */
- public interface ISpareribs {
- // 准备材料
- public void prepair();
-
- // 腌制排骨
- public void preserve();
-
- // 炸排骨
- public void fry();
-
- // 调汁
- public void juice();
-
- }
3.2糖醋排骨实现类一Spareribs
- package com.demo.common;
-
- /**
- *
- * 糖醋排骨实现类
- *
- * @author
- *
- */
- public class Spareribs implements ISpareribs {
- // 准备材料
- @Override
- public void prepair() {
- System.out.println("1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...");
- }
-
- // 腌制排骨
- @Override
- public void preserve() {
- System.out.println("2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...");
- }
-
- // 炸排骨
- @Override
- public void fry() {
- System.out.println("3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...");
- }
-
- // 调汁
- @Override
- public void juice() {
- System.out
- .println("4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!");
-
- }
-
- }
3.3创建外观接口一ICookFacade
- package com.demo.facade;
-
- /**
- * 外觀模式制作糖醋排骨
- *
- * @author
- *
- */
- public interface ICookFacade {
- // 做糖醋排骨
- public void cookSpareribs();
- }
3.4外观实现一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() {
- // 准备材料
- this.spareribs.prepair();
- // 腌制排骨
- this.spareribs.preserve();
- // 炸排骨
- this.spareribs.fry();
- // 调汁
- this.spareribs.juice();
- }
- }
3.5客户端测试
- package com.demo;
-
- import com.demo.facade.CookFacade;
- import com.demo.facade.ICookFacade;
-
- /**
- * 客户端应用程序
- *
- * @author
- *
- */
- public class Client {
- public static void main(String[] args) {
- // 开始做糖醋排骨了!
- System.out.println("==== 开始做糖醋排骨...");
- // // 创建糖醋排骨对象实例
- // ISpareribs spareribs = new Spareribs();
- // // 准备材料
- // spareribs.prepair();
- // // 腌制排骨
- // spareribs.preserve();
- // // 炸排骨
- // spareribs.fry();
- // // 调汁
- // spareribs.juice();
-
- ICookFacade cookFacade = new CookFacade();
- cookFacade.cookSpareribs();
- System.out.println("==== 糖醋排骨制作完成!");
- }
- }
4运行结果
==== 开始做糖醋排骨...
1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...
2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...
3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...
4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!
==== 糖醋排骨制作完成!
三该模式设计原则
1 迪米特法则——最小知识原则
2 封装变化部分
该图进一步展示了客户端应用程序,外观模式和子系统内部复杂应用三者的关系.
四使用场合
1 一个软件系统的复杂度比较高,需要一个更高级别的简单接口简化对子系统的操作时。
2 当使用端与实现类之间有太多的依赖性,需要降低使用端与子系统或子系统间的耦合性,增加子系统的独立性时。
3当子系统是相互依存的,需要层级化子系统,简化子系统之间的相依性的时候,可以使用外观模式。
五 外观模式静态类图
|