结构型模式之四——外观模式

来源:互联网 发布:东芝收购西屋 知乎 编辑:程序博客网 时间:2024/06/06 20:57

模式定义

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是一种对象结构型模式。

模式结构

模式结构如下图所示:
这里写图片描述

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

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

实例

为了使用方便,一个电源总开关可以控制四盏灯、一台电视机和一台空调的启动和关闭。通过该电源总开关可以同时控制所有上述电器设备,使用外观模式设计该系统。
该实例类图如下所示:
这里写图片描述

public class Light {    private int no;    public Light(int no) {        this.no = no;    }    public void on() {        System.out.println(this.no + "灯打开");    }    public void off() {        System.out.println(this.no + "灯关闭");    }}public class AirConditional {    public void on() {        System.out.println("空调打开");    }    public void off() {        System.out.println("空调关闭");    }}public class Television {    public void on() {        System.out.println("电视打开");    }    public void off() {        System.out.println("电视关闭");    }}public class GeneralSwitchFacade {    private Light linght[] = new Light[4];    private AirConditional ac;    private Television tv;    public GeneralSwitchFacade() {        light[0] = new Light(1);        light[1] = new Light(2);        light[2] = new Light(3);        light[3] = new Light(4);        ac = new AirConditional();        tv = new Television();    }    public void on() {        light[0].on();        light[1].on();        light[2].on();        light[3].on();        ac.on();        tv.on();    }    public void off() {        light[0].off();        light[1].off();        light[2].off();        light[3].off();        ac.off();        tv.off();    }}public class Client {    public static void main(String[] args) {        GeneralSwitchFacade gsf = new GeneralSwitchFacade();        gsf.on();        gsf.off();    }}
0 0
原创粉丝点击