门面(Facade)模式(也叫外观模式),为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。如下图表示:
从上图可以看出门面模式是把复杂的业务封装到了子系统内部,而对外部来说只有一个统一的访问界面,使得子系统更加简单,容易被客户端使用。门面模式的体现的是面向对象设计里面的迪米特法则(Law of Demeter)简称LoD,讲的是一个软件实体应当与尽可能少的其他软件实体发生相互作用,通过上面的示意图很明天体现的就是这一点。
门面模式的角色:
门面(Facade)角色:客户端通过此角色能了解到子系统提供的功能,门面角色会委派任务到相应的子系统中去。
子系统(SubSystem)角色:子系统不是单独的类,而是类的集合。负责提供业务逻辑,对子系统来说门面就是它的一个客户端。
在GOF中门面模式没有一个一般化的类图表示,这里用实例说明。门面模式在生活中常见,小时候玩过的游戏机,零花钱都买币玩那个三国志了,一个操作面板相当于一个门面,上面操作杆和操作按钮相当于门面提供的方法,这些方法实现是委托游戏机里面的各个部件,各个部件相互调用,相互配合完成了游戏的控制和操作,把复杂的业务逻辑封装起来,只提供简单有效的操作,这样十几岁的小孩子,乃至8,9岁的孩子都玩的很憨,如果不封装起来,给他电路,显示器,控制元件,估计没人会玩。
还记得我们大学的第一天吗,一个陌生的城市,陌生的环境,入学报到可以说相对复杂和麻烦的事情,但是往往都会有学生会的学长、学姐的接待和帮助,基本上跟着他走,所有事情都由他给你办了,只要签字或交钱就ok了,一切便的很简单。
代码如下:
package facade; /** * *作者:alaric *时间:2013-7-30下午7:53:07 *描述:招生办 */ public class EnrollmentOffice{ /** * 注册 */ public void register(){ System.out.println("注册"); } }
package facade; /** * *作者:alaric *时间:2013-7-30下午7:54:24 *描述:财务办 */ public class FinanceSection { /** * 缴费 */ public void payment(){ System.out.println("交学费"); } }
package facade; /** * *作者:alaric *时间:2013-7-30下午7:54:44 *描述:学生办 */ public class StudentAffairsOffice { public void getSomeGoods(){ System.out.println("领取生活用品"); } }
package facade; /** * *作者:alaric *时间:2013-7-30下午7:53:46 *描述:门面类,就是我们的学长,学姐 */ public class Facade { EnrollmentOffice enroll = new EnrollmentOffice(); FinanceSection finance = new FinanceSection(); StudentAffairsOffice studentAffairs = new StudentAffairsOffice(); public void helpJion(){ enroll.register(); finance.payment(); studentAffairs.getSomeGoods(); } }
package facade; /** * *作者:alaric *时间:2013-7-30下午7:52:39 *描述:客户端 */ public class Client { public static void main(String[] args) { Facade facade = new Facade(); facade.helpJion(); } }
运行结果:
注册
交学费
领取生活用品
门面模式的好处在于对于客户端子系统屏蔽了内部组件,减少客户单处理对象的数目,使客户端调用变的简单;将客户端和子系统解耦,子系统内部紧耦合,达到了系统设计的高内聚低耦合的要求。
设计模式系列目录:
相关推荐
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
EJB的经典模式——门面模式EJB的经典模式——门面模式
文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...
java设计模式,设计模式公司出品。策略模式,代理模式,单例模式,多例模式,工厂模式,门面模式等。
这是设计模式实训教程(第2版)相关是课程实验,主要有两个实验门面和代理
门面模式的Java实现版本和UML类设计图
Java的一些常用设计模式,包括单例模式、门面模式、策略模式、观察者模式、建造者模式、简单工厂模式、抽象工厂模式、工厂方法模式、代理模式、动态代理模式,适合初学者掌握
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
Factory模式,Prototype模式,Builder 模式,Singleton模式,Facade模式,Proxy模式,Adapter模式,Composite模式,Decorator模式....
java设计模式期末大作业,运用了6种模式,包括简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式、观察者模式,文档包括系统流程,系统类图,各个模式的子类图,源代码,实验截图。绝对完整.
java中常用到的设计模式,包括单例模式,工厂模式,建造模式门面模式等详细的解释
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
设计模式C++学习之门面模式(Facade)
策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、观察这模式、适配器模式、门面模式、桥梁模式
单态模式和简单工厂模式 工厂方法模式 抽象工厂模式 代理模式 代理模式之动态代理 策略模式 建造模式 门面模式
设计模式之门面模式,最容易理解和上手的实例,值得学习
[浪曦原创]JAVA设计模式.第8讲.门面模式(jzkangta).rar
7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...
策略模式、观察者模式、装饰模式、适配器模式、单例模式、工厂方法模式、门面模式,java语言实现的例子。