设计模式结构型外观模式
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式结构型外观模式相关的知识,希望对你有一定的参考价值。
一.概念
1.1概念
又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
1.2结构
外观(Facade)模式包含以下主要角色:
外观(Facade)角色:为多个子系统对外提供一个共同的接口。
子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
二.场景
物联网时代,可以将打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;操作智能设备,可以通过语音直接控制这些智能家电的开启和关闭。
三.类图及实现
public class Light
public void on()
System.out.println("打开了灯....");
public void off()
System.out.println("关闭了灯....");
public class TV
public void on()
System.out.println("打开了电视....");
public void off()
System.out.println("关闭了电视....");
public class AirCondition
public void on()
System.out.println("打开了空调....");
public void off()
System.out.println("关闭了空调....");
public class SmartAppliancesFacade
private Light light;
private TV tv;
private AirCondition airCondition;
public SmartAppliancesFacade()
light = new Light();
tv = new TV();
airCondition = new AirCondition();
public void say(String message)
if (message.contains("打开"))
on();
else if (message.contains("关闭"))
off();
else
System.out.println("我还听不懂你说的!!!");
private void on()
System.out.println("起床了");
light.on();
tv.on();
airCondition.on();
private void off()
System.out.println("睡觉了");
light.off();
tv.off();
airCondition.off();
public class FacadeMain
public static void main(String[] args)
SmartAppliancesFacade facade = new SmartAppliancesFacade();
facade.say("打开家电");
facade.say("关闭家电");
四.JDK源码应用
目的
定义 RequestFacade 类,分别实现 ServletRequest ,同时定义私有成员变量 Request ,并且方法的实现调用 Request 的实现。然后,将RequestFacade上转为 ServletRequest 传给servlet 的 service 方法,这样即使在 servlet 中被下转为 RequestFacade ,也不能访问私有成员变量对象中的方法。既用了 Request ,又能防止其中方法被不合理的访问。
以上是关于设计模式结构型外观模式的主要内容,如果未能解决你的问题,请参考以下文章