之前一直没有搞清楚代理模式 和 门面模式
今天偶然在程序理解了 门面模式的实质,特来的大家分享下(以下内容为转帖,个人觉得讲得不错,特来和大家分享)
一、门面模式定义
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 举个例子:在做项目或产品的过程中进行跨部门合作的时候,每个部门都有个相应的接口人,那么我们只需和对应部门的接口人交互即可,门面模式也一样,门面模式提供一个高层次的接口,使得子系统更易于使用。
二、 门面模式的结构
门面模式是对象的结构模式。门面模式没有一个一般化的类图描述,下图演示了一个门面模式的示意性对象图:
在这个对象图中,出现了两个角色:
门面(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
三、特点
子系统的独立性: 子系统对外提供一个统一简单的接口,可以减少系统间的耦合性,提高子系统的独立性和可移植性。
系统的层次性:在构建一个层次化的系统时,可以使用 Facade 模式定义系统中每一层的入口。如果层与层之间是相互依赖的,则可以限定它们仅通过 Facade 进行通信,从而简化层与层之间的依赖关系
//门面类
public class SecurityFacade{
private Camera camera1 , camera2;
private Light light1, light2, light3;
private Sensor sensor;
private Alarm alarm;
/* 省略对象的引入部分代码(方便很多)
*个人偏好的是在SecurityFacade的构造方法中引入对象
*/
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 Camera{
public void turnOn(){
System.out.println("Turning on the camera.");
}
public void turnOff(){
System.out.println(Turning off the camera.);
}
//转动录像机
public void rotate(int degrees){
System.out.println("rorating the camera by " + degrees + " degrees.");
}
}
//灯
public class Light{
public void turnOn(){
System.out.println("Turning on the light.");
}
public void turnOff(){
System.out.println("Turning off the light.");
}
//换灯泡
public void changeBulb(){
System.out.println("changing the light-bulb.");
}
}
//感应器
public class Sensor{
public void activate(){
System.out.println("Acticating the sensor.");
}
public void deactivate(){
System.out.println("Deactivating the sensor.");
}
//触发感应器
public void trigger(){
System.out.println("The sensor has been triggered.");
}
}
public class Alarm{
public void activate(){
System.out.println("Activating the alarm.");
}
public void deactivate(){
System.out.println("Deactivate the alarm.");
}
//拉响警报器
public void ring(){
System.out.println("Ring the alarm.");
}
//停掉警报器
public void stopRing(){
System.out.println("Stop the alarm.");
}
}
分享到:
相关推荐
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它为一个复杂的子系统提供了一个统一的接口,使得客户端可以更容易地使用这个子系统,而无需了解其内部的具体实现细节。在实际开发中,...
c++设计模式-结构型模式-外观模式;qt工程;c++简单源码; 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,...
设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,我们来了解什么是设计模式。设计模式是软件开发过程中遇到的某一类问题的典型解决方案。它们通常被分为...
门面(Facade)模式是一种设计模式,它在软件工程中被广泛使用,目的是为了提供一个更简单、更统一的接口来访问复杂的子系统。通过门面模式,客户端(调用者)无需直接与子系统中的多个组件交互,而是只需要与门面...
在C#中,设计模式的应用涵盖了策略模式、观察者模式、装饰者模式、工厂模式、单件模式、命令模式、适配器模式、门面模式、模板方法模式、迭代器模式、合成模式、状态模式、代理模式和复合使用模式等多个方面。...
设计模式是软件开发中的一种重要概念,用于解决常见的设计问题,提高代码的可重用性、可维护性和可扩展性。以下是对标题和描述中提到的一些主要设计模式的详细解释: 1. **工厂模式**:工厂模式是一种创建型设计...
### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...
在软件开发领域,设计模式是一种被广泛接受的解决常见问题的最佳实践。对于C++开发者而言,结合QT4开源跨平台开发框架,可以极大地提升代码的可重用性、可维护性和扩展性。QT4框架提供了丰富的类库和工具,使得在...
【J2EE设计模式】是构建企业级Java应用程序的基础,它们是经过时间验证的解决方案,用于解决在开发多层架构中常见的问题。J2EE设计模式不仅包括了传统的设计模式,如GOF(GoF)设计模式,还涉及到特定于J2EE环境的...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...
根据提供的文档概览,我们可以对每个章节所涉及的设计模式进行详细的阐述和解释。下面将针对文档中提及的设计模式逐一展开,以便更好地理解这些模式的概念、结构、应用场景以及优缺点。 ### 1. 面向对象程序设计...
《Head.First设计模式》是软件开发领域中一本非常受欢迎的书籍,它以通俗易懂的方式讲解了设计模式这一复杂的主题。在22到39章节中,作者深入浅出地探讨了多个关键的设计模式,这些模式对于使用C#进行软件开发的...
设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计...全书囊括单例设计模式、工厂模式、门面模式、代理模式、观察者模式、命令模式、模板方法模式、复合模式、状态设计模式以及反模式等多种设计模式。
本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,分别是简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式和观察者模式。该大作业的主要内容包括系统流程、系统类图、各个模式的子类图、...
门面(Facade)角色:客户端调用这个角色的方法。该角色知道相关的一个或多个子系统的功能和责任,该角色会将从客户端发来的请求委派带相应的子系统中去。 子系统(subsystem)角色:可以同时包含一个或
在“设计模式大作业.zip”这个压缩包中,我们看到了一系列使用了多种设计模式实现的代码示例,这包括简单工厂模式、工厂方法模式、单例模式、门面模式以及策略模式。接下来,我们将深入探讨这些设计模式及其在实际...