设计模式结构型外观模式

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 ,又能防止其中方法被不合理的访问。

以上是关于设计模式结构型外观模式的主要内容,如果未能解决你的问题,请参考以下文章

结构型模式-外观(Facade)模式

结构型模式之 外观模式

2 结构型模式之 - 外观模式

设计模式外观模式Facade(结构型)

设计模式--外观模式Facade(结构型)

结构型模式之外观模式