`

12、门面模式(facade)

 
阅读更多

门面模式(facade)

1、门面模式

门面模式是对象的结构模式,是通过一个代理一些复杂而又繁琐的操作,客户端只需调用改类中的方法,不必关心后台复杂的操作。

 

2、结构

 

在结构图中包含两种角色

‘门面角色:客户端可以通过门面角色与各个子系统进行通信。

子系统角色:可以同时有一个或者多个
 

3、代码

(1)电灯类

public class Light {
	public void turnOn(){
		System.out.println("开启灯...");
	}
	
	public void turnOff(){
		System.out.println("关闭灯...");
	}
	
	public void changeBulb(){
		System.out.println("换灯泡...");
	}
}

 

(2)相机类
public class Camera {
	
	public void turnOn(){
		System.out.println("开启相机...");
	}
	
	public void turnOff(){
		System.out.println("关闭相机...");
	}
	
	public void rotate(){
		System.out.println("转动相机...");
	}

}
 (3)传感器类
public class Sensor {
	
	public void activate(){
		System.out.println("启动传感器...");
	}
	
	public void deactivate(){
		System.out.println("关闭传感器...");
	}
	
	public void trigger(){
		System.out.println("出发传感器...");
	}

}
 (4)警报器类
public class Alarm {

	public void activate(){
		System.out.println("启动警报...");
	}
	
	public void deactivate(){
		System.out.println("关闭警报...");
	}
	
	public void ring(){
		System.out.println("触发警报...");
	}
	
	public void stopRing(){
		System.out.println("关闭警报...");
	}
	
}
 (5)安全控制facade类
**
 * 安全控制系统facade类
 * @author qiang
 *
 */
public class SecurityFacade {
	
	private Light light1, light2, light3;
	private Camera camera1, camera2;
	private Alarm alarm;
	private Sensor sensor;
	public SecurityFacade(){
		light1 = new Light();
		light2 = new Light();
		light3 = new Light();
		
		camera1 = new Camera();
		camera2 = new Camera();
		
		alarm = new Alarm();
		
		sensor = new Sensor();
	}
	
	/**
	 * 启动
	 */
	public void turnOn(){
		light1.turnOn();
		light2.turnOn();
		light3.turnOn();
		
		camera1.turnOn();
		camera2.turnOn();
		
		alarm.activate();
		
		sensor.activate();
	}
	
	/**
	 * 关闭
	 */
	public void turnOff(){
		light1.turnOff();
		light2.turnOff();
		light3.turnOff();
		
		camera1.turnOff();
		camera2.turnOff();
		
		alarm.deactivate();
		
		sensor.deactivate();
	}

}
 (6)客户端类
/**
 * 客户端
 * @author qiang
 *
 */
public class Client {
	
	public static void main(String[] args) {
		SecurityFacade facade = new SecurityFacade();
		facade.turnOn();//启动
		facade.turnOff();//关闭
	}

}
 
4、总结
1)根据“单一职责原则”在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口

 

2)外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,外观类充当了客户类与子系统类之间的“第三者”,同时降低客户类与子系统类的耦合度。外观模式就是实现代码重构以便达到“迪米特法则”要求的一个强有力的武器。

 

3)外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道

 

 

4)外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。
5)不要试图通过外观类为子系统增加新行为 ,不要通过继承一个外观类在子系统中加入新的行为,这种做法是错误的。外观模式的用意是为子系统提供一个集中化和简化的沟通渠道,而不是向子系统加入新的行为,新的行为的增加应该通过修改原有子系统类或增加新的子系统类来实现,不能通过外观类来实现。
  • 大小: 4.9 KB
分享到:
评论

相关推荐

    设计模式之门面模式(Facade模式)

    设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等

    设计模式C++学习之门面模式(Facade)

    门面模式(Facade)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口问题,提供一个简单的统一接口,使得客户端可以更方便地使用系统。在C++编程中,门面模式的应用尤为常见,它能有效地降低...

    设计模式 之 “门面模式[Facade Pattern]”

    门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...

    设计模式之Facade

    eclipse工程文件 包含代码 有助理解 门面(Facade)模式 <br>外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 <br>医院的例子 <br>用一个例子进行说明,如果把医院...

    结构型模式之门面模式(Facade)

    门面模式(Facade)是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,通过提供一个简单的统一接口来屏蔽子系统的复杂性,使得客户端与子系统的交互变得更加简单和直观。在大型软件系统中,往往...

    第8讲_门面模式(Facade)

    门面模式(Facade Pattern)是一种设计模式,它在软件工程中扮演着简化复杂系统接口的角色。当一个系统或子系统包含大量类,并且客户端需要与这些类进行交互时,门面模式可以提供一个高层次的单一接口,使得客户端的...

    迪米特法则---门面Facade模式.docx

    门面(Facade)模式是一种设计模式,遵循迪米特法则,旨在简化子系统的使用,减少客户端与子系统之间的复杂依赖关系。迪米特法则主张一个对象应该尽量减少与其他对象的交互,只与直接的朋友交流,以此提高系统的内聚...

    C++设计模式课件14_Facade_门面模式.pdf

    ### C++设计模式之门面模式(Facade Pattern) #### 一、门面模式概述 在软件工程领域,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...

    我们考察一个保安系统的例子来讲门面(Facade)模式

    门面(Facade)模式的应用 门面(Facade)模式是结构型设计模式之一,目的是提供一个统一的接口来访问一个子系统中的一组接口。门面模式可以简化客户端对子系统的访问,减少子系统的复杂性。 在本例中,我们使用一...

    facade门面模式

    门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是为复杂的子系统提供一个统一且简单的接口,使得客户端能够更方便地与这些子系统交互,而无需了解子系统的内部实现细节。这种模式降低了客户端与子...

    学习php设计模式 php实现门面模式(Facade)

    门面模式(Facade Pattern)是一种设计模式,它的主要目的是为了解决复杂系统中各个子系统的交互问题,提供一个简单的统一接口,使得客户端可以更轻松地使用这些子系统。这种模式在PHP开发中非常常见,特别是在处理...

    外观模式facade

    外观模式(Facade)是设计模式中的一种结构型模式,它为复杂的系统或子系统提供了一个统一的入口点,简化了客户端与系统之间的交互。通过外观模式,我们可以将系统的内部复杂性隐藏起来,使得用户只需要与一个简单的...

    设计模式之门面模式

    门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它提供了一个统一的接口,用来访问子系统中的一群接口。门面模式使得子系统的使用更为简单,同时也隐藏了子系统的复杂性,使得客户端...

    Facade模式

    2. **外观(Facade)**:也称为门面,它是客户端和子系统之间的接口,隐藏了子系统的复杂性。它将客户端需要调用的子系统接口封装起来,提供给客户端一个简单的接口。 3. **客户端(Client)**:通过调用外观对象的...

    java实现的简单的应用facade模式范例

    Facade模式,也称为门面模式,是一种结构型设计模式,它提供了一个统一的接口,用于与复杂的子系统进行交互。这个模式简化了客户端与子系统之间的交互,使得客户端只需要知道一个简单的接口,而无需了解子系统的内部...

    Java实现的门面模式

    门面模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解决复杂的系统接口提供一个简单易用的统一入口。在Java中,门面模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,提高代码的...

    23种设计模式--门面模式

    门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式。它为一个复杂的子系统提供了一个统一的接口,使得客户端可以更容易地使用这个子系统,而无需了解其内部的具体实现细节。在实际开发中,...

    门面模式(代码)

    门面模式(Facade Pattern)是一种设计模式,属于结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的入口,使得外部客户端可以更简单、更方便地与系统交互,而无需关注系统的内部实现细节。在门面模式中...

    门面模式门面模式

    门面模式(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口,用来访问子系统中的一组接口。这个接口使得子系统更容易使用,同时也减少了客户端代码与子系统之间的耦合。门面模式通常用于...

Global site tag (gtag.js) - Google Analytics