一. 定义

  • 为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。


二. 模式结构

1. Facade(外观角色)

  • 在客户端可以调用这个角色的方法,在外观角色中可以知道相关的子系统的功能和责任;在正常情况下,他将所有从客户端发来的请求委派到相应的子系统去,传给相应的子系统对象处理。

2. SubSystem(子系统角色)

  • 在软件系统中可以同时有多个子系统角色,每个子系统可以是一个类的集合,它实现子系统的功能;每一个子系统都可以被客户端直接调用,或者被外观角色调用,它处理由外观类传来的请求;子系统不知道外观的存在,对于子系统而言,外观仅仅是另外一个客户端而已。


三. 实例

1. GeneralSwitchFacade

public class GeneralSwitchFacade {
    private Light light;
    private Fan fan;

    public GeneralSwitchFacade() {
        light=new Light();
        fan=new Fan();
    }

    public void on() {
        light.on();
        fan.on();
    }

    public void off() {
        light.off();
        fan.off();
    }
}

2. Light

public class Light {
    public Light() {
    }

    public void on() {
        System.out.println("灯打开");
    }

    public void off() {
        System.out.println("灯关闭");
    }
}

3. Fan

public class Fan {
    public void on() {
        System.out.println("风扇打开");
    }

    public void off() {
        System.out.println("风扇关闭");
    }
}

4. Client

public class Client
{
    public static void main(String[] args) throws Exception
    {
        GeneralSwitchFacade gs=new GeneralSwitchFacade();
        gs.on();
        gs.off();
    }
}