[原]门面模式

本文通过一个保安系统的实例,展示了如何使用门面模式来简化多个子系统组件的操作流程。在没有采用门面模式的情况下,操作者需要手动启动和关闭各个设备;而引入门面模式后,只需调用门面类的启动和停止方法即可完成所有设备的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[关键字]:java,design pattern,设计模式,《Java与模式》学习,门面模式,外观模式,Facade Pattern
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/
[正文]:

无门面模式时:




 
 


有门面模式时:



 


package pattern.facade;
/**
 * 门面模式/外观模式:Facade Pattern
 *
 * 保安系统:
 * 一个保安系统由两个录像机、一个感应器和一个报警器组成。
 * 由保安操作仪器的启动和关闭:没有使用门面模式时,保安必须亲自启动每个仪器。
 * @version 2009-6-15
 * @author Winty(wintys@gmail.com)
 */
public class FacadeTest{
    public static void main(String[] args){
        //无门面模式
        Camera camera1,camera2;
        camera1 = new Camera();
        camera2 = new Camera();
        
        Sensor sensor;
        sensor = new Sensor();

        Alarm alarm;
        alarm = new Alarm();

        //启动仪器
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
        System.out.println("");

        /////////////////////////////////
        //使用门面模式
        SecurityFacade security = new SecurityFacade();
        security.start();
    }
}

/**
 * 门面:Facade
 */
class SecurityFacade{
    private Camera camera1;
    private Camera camera2;
    private Sensor sensor;
    private Alarm alarm;

    public SecurityFacade(){
        camera1 = new Camera();
        camera2 = new Camera();
        sensor = new Sensor();
        alarm = new Alarm();
    }
    //启动
    public void start(){
        camera1.turnOn();
        camera2.turnOn();
        sensor.activate();
        alarm.activate();
    }

    //停止
    public void stop(){
        camera1.turnOff();
        camera2.turnOff();
        sensor.deactivate();
        alarm.deactivate();
    }
}

class Camera{
    public void turnOn(){
        System.out.println("turn on the Camera.");
    }

    public void turnOff(){
        System.out.println("turn off the Camera.");
    }

    //转动
    public void rotate(){
        System.out.println("rotate the Camera.");
    }
}


class Sensor{
    public void activate(){
        System.out.println("activate the sensor.");
    }

    public void deactivate(){
        System.out.println("deactivate the sensor.");
    }

    //触发感应器
    public void trigger(){
        System.out.println("trigger the sensor.");
    }
}

class Alarm{
    public void activate(){
        System.out.println("activate the alarm.");
    }

    public void deactivate(){
        System.out.println("deactivate the alarm.");
    }

    //拉响报警器
    public void ring(){
        System.out.println("ring the alarm.");
    }
}


运行结果:
turn on the Camera.
turn on the Camera.
activate the sensor.
activate the alarm.

turn on the Camera.
turn on the Camera.
activate the sensor.
activate the alarm.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值