门面模式:门面模式(亦称外观模式Facade Pattern),外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
故事一:
我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。(相机制造者把一系列调光圈、对焦距、快门等封装成了一个自动挡按钮,只要一按钮这一系列动作一气呵成,这个按钮就是对外提供给用户的门面,用户不再需要一系列繁重操作)
故事二:
人是吃五谷杂粮的,饮食不协调,气候不适应,酸性体质的人就容易生病,生病了就要去医院,看病就医,走下面这个流程:病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。也许第一次去看病的人,不知道流程直接进冲到医生值班室,找医生看病,可是系统中没有你的号码信息,医生在电脑上面开不了你的单子,后续就无法进行。如果有这么一个流程该多好呀:由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员与各个部门打交道。
故事三:
投递信件的过程是:首先写信的内容 -> 其次写信封 -> 把信放到信封里 -> 然后邮递
手机时代的来临解决了邮局的发信业务,现在有事情,发短信:只要告诉三大运营商系统,发给谁,发送什么内容,然后就不用自己写信封,封信,投递到邮筒里面的繁琐操作。
故事四:
安保系统由录像机、感应器、报警器三部分组成;宝安GG重启系统的时候必须按照录像机、感应器、报警器一个个接通电源,按按钮;假设监控软件自带一个一键重启功能,只要一按钮,就自动按顺序重启了。对外暴漏的操作过程就没有那么繁多,不容易出错。
这些故事都有一个共同点就是交互过程操作步骤繁多,容易出错:
故事一:照相时候MM可能没有对焦、调光圈就按了快门,结果找出来一张什么样的照片,你懂的;
故事二:病人没有挂号,直接冲到医生值班室就医,出现的窘况你是知道的。
门面模式说白了就是封装了一个类,简化了用户的操作步骤;而此类的作用是按顺序执行方法。调用者无需知道具体流程,只需要将要传递的参数传给该类,这样该类就按顺序执行就好了,符合高扩展性以及高内聚低耦合的原则。比如某天照相机自动挡按钮多了一个新功能,你是不知道的,你仅仅知道那是一个按钮而已;病人挂号医生医院需要检查病人是否有社保可以报销等等,对于病人来说,我来看病挂号、取药、缴费都不用我来完成,直接找接待员就行;发送信息需要检查信息内容是否健康等等;都不需要用户知道;FaceFade已经帮用户封装好了,只需要扩展就行。
例子(非自己原创):
/** * 门面模式/外观模式:Facade Pattern * 保安系统: * 一个保安系统由两个录像机、一个感应器和一个报警器组成。 * 由保安操作仪器的启动和关闭:没有使用门面模式时,保安必须亲自启动每个仪器。 * @version 2009-6-15 * @author Winty(wintys@gmail.com) */ public class FacadeTest{ public static void main(String[] args){ //无门面模式 Camera camera1,camera2; camera1 = new Camera(); camera2 = new Camera(); Sensor sensor; sensor = new Sensor(); Alarm alarm; alarm = new Alarm(); //启动仪器 camera1.turnOn(); camera2.turnOn(); sensor.activate(); alarm.activate(); System.out.println(""); ///////////////////////////////// //使用门面模式 SecurityFacade security = new SecurityFacade(); security.start(); } } /** * 门面:Facade */ class SecurityFacade{ private Camera camera1; private Camera camera2; private Sensor sensor; private Alarm alarm; public SecurityFacade(){ camera1 = new Camera(); camera2 = new Camera(); sensor = new Sensor(); alarm = new Alarm(); } //启动 public void start(){ camera1.turnOn(); camera2.turnOn(); sensor.activate(); alarm.activate(); } //停止 public void stop(){ camera1.turnOff(); camera2.turnOff(); sensor.deactivate(); alarm.deactivate(); } } class Camera{ public void turnOn(){ System.out.println("turn on the Camera."); } public void turnOff(){ System.out.println("turn off the Camera."); } //转动 public void rotate(){ System.out.println("rotate the Camera."); } } class Sensor{ public void activate(){ System.out.println("activate the sensor."); } public void deactivate(){ System.out.println("deactivate the sensor."); } //触发感应器 public void trigger(){ System.out.println("trigger the sensor."); } } class Alarm{ public void activate(){ System.out.println("activate the alarm."); } public void deactivate(){ System.out.println("deactivate the alarm."); } //拉响报警器 public void ring(){ System.out.println("ring the alarm."); } }
相关推荐
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...
### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...
7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它为一个复杂的子系统提供了一个统一的接口,使得客户端可以更容易地使用这个子系统,而无需了解其内部的具体实现细节。在实际开发中,...
6. 门面模式(Facade Pattern): 门面模式是提供一个统一的接口来访问一个子系统的多个接口。它的主要作用是简化子系统的使用,提高代码的可读性和维护性。 7.享元模式(Flyweight Pattern): 享元模式是用来优化...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
本书《您的设计模式》对设计模式进行了详细的讲解,涵盖了策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式、装饰模式、...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了简化客户端与复杂系统之间的交互。在C#编程中,外观模式通常用于减少客户端对子系统组件的依赖,提供一个统一的、高层次的接口,使得...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是为复杂的子系统提供一个统一且简单的接口,使得客户端能够更方便地与这些子系统交互,而无需了解子系统的内部实现细节。这种模式降低了客户端与子...
门面模式【FACADE PATTERN】 适配器模式【ADAPTER PATTERN】 模板方法模式【TEMPLATE METHOD PATTERN】 建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】 命令模式【COMMAND PATTERN...
门面模式(Facade Pattern)是一种设计模式,它在软件工程中扮演着简化复杂系统接口的角色。当一个系统或子系统包含大量类,并且客户端需要与这些类进行交互时,门面模式可以提供一个高层次的单一接口,使得客户端的...
5. 门面模式(FACADEPATTERN):门面模式提供了一个统一的接口,用来访问子系统中的一群接口。门面定义了一个高层接口,让子系统更容易使用。 6. 适配器模式(ADAPTERPATTERN):适配器模式将一个类的接口转换成...
门面模式是一种结构型设计模式,它提供了一个统一的接口来访问多个子系统的多个不同的接口,来控制访问的粒度。这种模式的优点是,它可以让客户更方便地访问子系统。 2. 代理模式(Proxy) 代理模式是一种结构型...
例如,使用“门面模式”(Facade Pattern)可以简化复杂的系统接口,使其更容易被客户端使用;利用“代理模式”(Proxy Pattern)可以实现对远程EJB的透明访问;通过“工厂模式”(Factory Pattern)可以统一创建EJB...
7. 门面模式(Facade Pattern) 门面模式提供了一个统一的接口,用来访问子系统中的一群接口。门面定义了一个高层接口,让子系统更容易使用。 8. 适配器模式(Adapter Pattern) 适配器模式允许将一个类的接口...
7. 门面模式(Facade Pattern):为子系统中的一组接口提供一个统一的界面。 8. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 9. 桥接模式(Bridge...
21. 门面模式(Facade Pattern):为子系统提供一个一致的接口,使得这些子系统更容易使用。 22. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象,减少内存消耗。 23. 外观模式(Facade ...
享元模式(Flyweight Pattern)则是另一种优化性能的设计模式,它的核心思想在于对相似对象的共享。这种模式通过共享技术,使得大量细粒度的对象能够共用同一个实例,从而减少内存消耗和提高性能。在处理大量相似...