- 浏览: 212270 次
- 性别:
- 来自: 北京
文章分类
门面模式又叫外观模式。
为子系统的一组接口提供一个一致的门面,定义了更高层的接口,使子系统更方便使用。
所有客户端直接与门面类进行交互,这样就减少了客户端与子系统之间的耦合。
组成:门面角色,被客户端调用,它熟悉子系统的功能,根据客户的需求提供了一些供客户端使用的功能组合。
子系统角色:实现了子系统的功能,对它而言不知道facade的存在。
客户端角色:调用facade来完成需要实现的功能。
facade的一个典型的实例就是数据库链接,如我们每次访问数据库都是建立conn,获取statement,执行sql,得到statement,我们可以对这些步骤进行一个
抽象,然后把端口暴露给上层.
优点:对客户端而言,它屏蔽了子系统。使得子系统不可见。降低了客户端与子系统的耦合。
在大型软件中降低编译依赖性非常重要,使用facade后编译一个修改了的子系统也不需要编译其他子系统。
实例:
public class Camera
{
public void TurnOn()
{
Console.WriteLine("Turning on the camera.");
}
public void TurnOff()
{
Console.WriteLine("Turning off the camera.");
}
public void Rotate(int degrees)
{
Console.WriteLine("Rotating the camera by {0} degrees.", degrees);
}
}
public class Light
{
public void TurnOff()
{
Console.WriteLine("Turning on the light.");
}
public void TurnOn()
{
Console.WriteLine("Turning off the light.");
}
public void ChangeBulb()
{
Console.WriteLine("changing the light-bulb.");
}
}
public class Sensor
{
public void Activate()
{
Console.WriteLine("Activating the sensor.");
}
public void Deactivate()
{
Console.WriteLine("Deactivating the sensor.");
}
public void Trigger()
{
Console.WriteLine("The sensor has triggered.");
}
}
public class Alarm
{
public void Activate()
{
Console.WriteLine("Activating the alarm.");
}
public void Deactivate()
{
Console.WriteLine("Deactivating the alarm.");
}
public void Ring()
{
Console.WriteLine("Ringing the alarm.");
}
public void StopRing()
{
Console.WriteLine("Stop the alarm.");
}
}
public class SecurityFacade
{
private static Camera camera1, camera2;
private static Light light1, light2, light3;
private static Sensor sensor;
private static Alarm alarm;
static SecurityFacade()
{
camera1 = new Camera();
camera2 = new Camera();
light1 = new Light();
light2 = new Light();
light3 = new Light();
sensor = new Sensor();
alarm = new Alarm();
}
public void Activate()
{
camera1.TurnOn();
camera2.TurnOn();
light1.TurnOn();
light2.TurnOn();
light3.TurnOn();
sensor.Activate();
alarm.Activate();
}
public void Deactivate()
{
camera1.TurnOff();
camera2.TurnOff();
light1.TurnOff();
light2.TurnOff();
light3.TurnOff();
sensor.Deactivate();
alarm.Deactivate();
}
}
public class Client
{
private static SecurityFacade security;
public static void Main( string[] args )
{
security = new SecurityFacade();
security.Activate();
Console.WriteLine("\n--------------------\n");
security.Deactivate();
}
注释:使用门面模式后,根据客户端的需求直接暴露给客户端所需要的接口。如上客户端只需要调用facade的两个操作就可以完成想要的功能。
否则客户端需要创建出全部子系统的实例,然后很多进行操作才会达到使用门面模式的效果。
为子系统的一组接口提供一个一致的门面,定义了更高层的接口,使子系统更方便使用。
所有客户端直接与门面类进行交互,这样就减少了客户端与子系统之间的耦合。
组成:门面角色,被客户端调用,它熟悉子系统的功能,根据客户的需求提供了一些供客户端使用的功能组合。
子系统角色:实现了子系统的功能,对它而言不知道facade的存在。
客户端角色:调用facade来完成需要实现的功能。
facade的一个典型的实例就是数据库链接,如我们每次访问数据库都是建立conn,获取statement,执行sql,得到statement,我们可以对这些步骤进行一个
抽象,然后把端口暴露给上层.
优点:对客户端而言,它屏蔽了子系统。使得子系统不可见。降低了客户端与子系统的耦合。
在大型软件中降低编译依赖性非常重要,使用facade后编译一个修改了的子系统也不需要编译其他子系统。
实例:
public class Camera
{
public void TurnOn()
{
Console.WriteLine("Turning on the camera.");
}
public void TurnOff()
{
Console.WriteLine("Turning off the camera.");
}
public void Rotate(int degrees)
{
Console.WriteLine("Rotating the camera by {0} degrees.", degrees);
}
}
public class Light
{
public void TurnOff()
{
Console.WriteLine("Turning on the light.");
}
public void TurnOn()
{
Console.WriteLine("Turning off the light.");
}
public void ChangeBulb()
{
Console.WriteLine("changing the light-bulb.");
}
}
public class Sensor
{
public void Activate()
{
Console.WriteLine("Activating the sensor.");
}
public void Deactivate()
{
Console.WriteLine("Deactivating the sensor.");
}
public void Trigger()
{
Console.WriteLine("The sensor has triggered.");
}
}
public class Alarm
{
public void Activate()
{
Console.WriteLine("Activating the alarm.");
}
public void Deactivate()
{
Console.WriteLine("Deactivating the alarm.");
}
public void Ring()
{
Console.WriteLine("Ringing the alarm.");
}
public void StopRing()
{
Console.WriteLine("Stop the alarm.");
}
}
public class SecurityFacade
{
private static Camera camera1, camera2;
private static Light light1, light2, light3;
private static Sensor sensor;
private static Alarm alarm;
static SecurityFacade()
{
camera1 = new Camera();
camera2 = new Camera();
light1 = new Light();
light2 = new Light();
light3 = new Light();
sensor = new Sensor();
alarm = new Alarm();
}
public void Activate()
{
camera1.TurnOn();
camera2.TurnOn();
light1.TurnOn();
light2.TurnOn();
light3.TurnOn();
sensor.Activate();
alarm.Activate();
}
public void Deactivate()
{
camera1.TurnOff();
camera2.TurnOff();
light1.TurnOff();
light2.TurnOff();
light3.TurnOff();
sensor.Deactivate();
alarm.Deactivate();
}
}
public class Client
{
private static SecurityFacade security;
public static void Main( string[] args )
{
security = new SecurityFacade();
security.Activate();
Console.WriteLine("\n--------------------\n");
security.Deactivate();
}
注释:使用门面模式后,根据客户端的需求直接暴露给客户端所需要的接口。如上客户端只需要调用facade的两个操作就可以完成想要的功能。
否则客户端需要创建出全部子系统的实例,然后很多进行操作才会达到使用门面模式的效果。
发表评论
-
多种单例模式的分析
2012-03-28 18:06 0blog.csdn.net/derpvailzhangfan/ ... -
JDK中的设计模式
2012-03-14 22:56 01.Abstract Factory •java.util.C ... -
简单工厂模式使用心得(使用场景)
2012-02-23 18:24 11489在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 949AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 891情景1.当借个类都拥有 ... -
Iterator模式
2012-01-13 10:57 862我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2739创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14191.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1011通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 845所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 951如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 809此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 813如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5828引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 909代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1375声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1228今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 886建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 938适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ...
相关推荐
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
门面模式的Java实现版本和UML类设计图
设计模式
NULL 博文链接:https://dada-fangfang.iteye.com/blog/1021146
本文实例讲述了JavaScript设计模式之门面模式原理与实现方法。分享给大家供大家参考,具体如下: 外部与一个子系统的通信必须通过一个系统的一个门面对象进行,这就是门面模式。 门面模式具备如下两个角色: 1. 门面...
本文实例讲述了Python设计模式之门面模式。分享给大家供大家参考,具体如下: facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程。 一个门面可以看作是为大段代码提供简单接口的对象,就...
23种设计模式--门面模式
设计模式C++学习之门面模式(Facade)
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
这是设计模式实训教程(第2版)相关是课程实验,主要有两个实验门面和代理
C++设计模式课件14_Facade_门面模式.pdf
门面模式门面模式门面模式
设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...
NULL 博文链接:https://lym6520.iteye.com/blog/707060
java设计模式门面模式java设计模式门面模式
门面模式郭嘉模式定义:为子系统中的一组接口提供一个一致的接口,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用案例:* @author