- 浏览: 216752 次
- 性别:
- 来自: 北京
文章分类
门面模式又叫外观模式。
为子系统的一组接口提供一个一致的门面,定义了更高层的接口,使子系统更方便使用。
所有客户端直接与门面类进行交互,这样就减少了客户端与子系统之间的耦合。
组成:门面角色,被客户端调用,它熟悉子系统的功能,根据客户的需求提供了一些供客户端使用的功能组合。
子系统角色:实现了子系统的功能,对它而言不知道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 11531在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 979AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 920情景1.当借个类都拥有 ... -
Iterator模式
2012-01-13 10:57 897我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2796创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14431.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1042通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 892所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 992如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 844此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 845如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5857引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 940代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1426声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1258今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 927建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 973适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ...
相关推荐
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
门面模式作为23种设计模式之一,其核心思想是提供了一个统一的接口,使得子系统的复杂性对外部客户端透明,从而简化了客户端与子系统之间的交互。本文将详细介绍门面模式的组成、应用案例、适用场景和优势,并探讨其...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...
门面模式(Facade Pattern)是软件工程中一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。这个统一的接口使得客户端不必了解子系统内部的复杂性,只需要与门面进行交互即可。门面模式简化...
在提供的资源“第17课_设计模式之门面模式.avi”中,可能包含了对门面模式的详细讲解和实例演示,可以帮助你更深入地理解和掌握这一设计模式。通过观看视频,你将有机会看到如何在实际代码中应用门面模式,以及如何...
### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...
本文实例讲述了Python设计模式之门面模式。分享给大家供大家参考,具体如下: facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程。 一个门面可以看作是为大段代码提供简单接口的对象,就...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用于客户端与复杂的子系统之间的交互,使得客户端无需关心子系统的内部结构和实现细节,只需要通过门面角色进行通信。...
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...
门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...
【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...
门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...