门面模式:
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
结构:
门面角色(Facade):客户端可以调用这个角色的方法,由此对象知晓相关(一个或多个)子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
子系统角色(SubSystem):可同时有一个或多个子系统,每个子系统都不是单独的类。而是类的集合。每个系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面对象的存在。对于子系统而言,门面仅仅是另外一个客户端而已。
门面模式通常只需要一个门面类,并且只有一个实例,即它是一个单利类。每个子系统只有一个门面类,如果一个系统有好几个子系统,每个子系统有一个门面类,整个系统有多个门面类。如果子系统没有某个功能,想通过修改门面类或者继承门面类的方法来提供新功能的行为是错误的。
实例:
一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。
代码:
class Camera { public void turnOn() { System.out.println("turning on the camera."); } public void turnOff() { System.out.println("turning off the camera."); } } class Light { public void turnOn() { System.out.println("turning on the light."); } public void turnOff() { System.out.println("turning off the light."); } } class Sensor { public void activate() { System.out.println("activating the sensor."); } public void deactivate() { System.out.println("deactivating the sensor."); } } class Alarm { public void activate() { System.out.println("activating the sensor."); } public void deactivate() { System.out.println("deactivating the sensor."); } } public class FacedePattern { public static void main(String[] args) { Camera camera1 = new Camera(); Camera camera2 = new Camera(); Light light1 = new Light(); Light light2 = new Light(); Sensor sensor = new Sensor(); Alarm alarm = new Alarm(); camera1.turnOn(); camera2.turnOn(); light1.turnOn(); light2.turnOff(); sensor.activate(); alarm.activate(); } }
有些方法没有写出来。
使用门面模式:
准备一个系统的控制台,作为保安系统的用户界面。
SecurityFacade对象承担了与保安系统内部各个对象打交道的任务。客户对象只需要与门面对象交互即可。
class SecurityFacade { private Camera camera1, camera2; private Light light1, light2; private Sensor sensor; private Alarm alarm; public SecurityFacade() { camera1 = new Camera(); camera2 = new Camera(); light1 = new Light(); light2 = new Light(); sensor = new Sensor(); alarm = new Alarm(); } public void activate() { camera1.turnOn(); camera2.turnOn(); light1.turnOn(); light2.turnOff(); sensor.activate(); alarm.activate(); } public void deactivate() { camera1.turnOff(); camera2.turnOff(); light1.turnOff(); light2.turnOff(); sensor.deactivate(); alarm.deactivate(); } } public class FacedePattern { public static void main(String[] args) { SecurityFacade sf = new SecurityFacade(); sf.activate(); sf.deactivate(); } }
参考:
《Java与模式》
相关推荐
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
设计模式C++学习之门面模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用【GOF95】 外部与子系统的通信是通过一个门面(Facade)对象进行。 二、门面模式结构图 三、门面模式中主要角色 ...
eclipse工程文件 包含代码 有助理解 门面(Facade)模式 <br>外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 <br>医院的例子 <br>用一个例子进行说明,如果把医院...
1、门面模式(Facade) 用意:提供一个统一的接口去访问多个子系统的多个不同的接口,来控制访问的粒度。
7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...
C++设计模式课件14_Facade_门面模式.pdf
门面模式为子系统提供一个统一的高层接口,供外部客户使用。 门面模式提供了一个更高层次的接口,使得子系统更容易使用。
NULL 博文链接:https://lym6520.iteye.com/blog/707060
java设计模式门面模式java设计模式门面模式
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
开发中常见一种模式之一,在简化其开发步骤,完成同样的工作开发中常见一种模式之一,在简化其开发步骤,完成同样的工作隐藏>>
模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...
Ajax中使用Facade外观(门面)模式的Eclipse版本的Demo.
我们考察一个保安系统的例子,以说明门面模式的功效。一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。
主要介绍了C#设计模式编程中外观模式Facade Pattern的应用,外观模式中分为门面(Facade)和子系统(subsystem)两个角色来进行实现,需要的朋友可以参考下
1) 家庭影院中有CD机,DVD机,收音机Turner,录影机Recorder,功放Amplifier,升降屏幕Screen等,请为家庭影院系统设计一个请设计一个门面,通过它可以方便的操作其他设备放电影等。 2) 编写一个测试主类,测试你的...
门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略模式 代理模式 单例模式 多例模式 工厂方法模式 抽象工厂模式 门面模式 适配器...
23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method...3)、门面模式:Facade 4)、装饰模式:Decorator 3、行为型模式 1)、策略模式:Strategy 2)、观察者模式:Observer