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

模式定义

外观模式(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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值