外观模式Facade(结构型)

参考文档:

1.设计模式书籍

2.http://blog.csdn.net/hguisu/article/details/7533759



外观模式Facade(结构型)

理论方面的可以查看这篇博客:http://blog.csdn.net/hguisu/article/details/7533759( 设计模式(九)外观模式Facade(结构型))


代码实现:(案例是上篇博客中的例子)

例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。

Client.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class Client {


    public static void main(String[] args) {
        ConcreteFacade concreteFacade = new ConcreteFacade();

        concreteFacade.on();
        System.out.println("-----------------------------------------------");
        concreteFacade.off();

        System.out.println("-----------------------------------------------");
        ConcreteFacade2 concreteFacade2 = new ConcreteFacade2();
        concreteFacade2.on();
        System.out.println("-----------------------------------------------");
        concreteFacade2.off();
    }


}
AbstractFacade.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public abstract class AbstractFacade {

    public abstract void on();

    public abstract void off();

}
ConcreteFacade.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class ConcreteFacade extends AbstractFacade {
    private AirConditioner mAirConditioner;
    private Fan mFan;
    private Light mLight;

    public ConcreteFacade() {
        mAirConditioner = new AirConditioner();
        mFan = new Fan();
        mLight = new Light();
    }

    @Override
    public void on() {
        mAirConditioner.on();
        mFan.on();
        mLight.on();
    }

    @Override
    public void off() {
        mAirConditioner.off();
        mFan.off();
        mLight.off();
    }
}
ConcreteFacade2.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class ConcreteFacade2 extends AbstractFacade {
    private AirConditioner mAirConditioner;
    private Fan mFan;
    private Light mLight;
    private Television mTelevision;

    public ConcreteFacade2() {
        mAirConditioner = new AirConditioner();
        mFan = new Fan();
        mLight = new Light();
        mTelevision = new Television();
    }

    @Override
    public void on() {
        mAirConditioner.on();
        mFan.on();
        mLight.on();
        mTelevision.on();
    }

    @Override
    public void off() {
        mAirConditioner.off();
        mFan.off();
        mLight.off();
        mTelevision.off();
    }
}
AirConditioner.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class AirConditioner {
    public void on(){
        System.out.println("AirConditioner is on");
    }

    public void off(){
        System.out.println("AirConditioner is off");
    }
}
Fan.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class Fan {
    public void on(){
        System.out.println("Fan is on");
    }

    public void off(){
        System.out.println("Fan is off");
    }
}
Light.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class Light {


    public void on(){
        System.out.println("light is on");
    }

    public void off(){
        System.out.println("light is off");
    }

}
Television.java:
package com.rick.designpattern.facade;

/**
 * Created by MyPC on 2017/6/5.
 */
public class Television {

    public void on(){
        System.out.println("Television is on");
    }

    public void off(){
        System.out.println("Television is off");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值