一. 定义
外观模式,又称门面模式。提供一个统一的接口,用来访问子系统中的一群接口。其主要特征是使定义了一个高层接口,让子系统更加容易使用
二.代码示例
以下代码模拟一个灯的总开关,通过调用灯的总开关达成对所有灯的开关
1.Light.java
package org.example.log.facade;
public interface Light {
void on();
void off();
}
2.BedroomLight.java
package org.example.log.facade;
public class BedroomLight implements Light{
@Override
public void on() {
System.out.println("BedroomLight on");
}
@Override
public void off() {
System.out.println("BedroomLight off");
}
}
3.HallLight.java
package org.example.log.facade;
public class HallLight implements Light{
@Override
public void on() {
System.out.println("HallLight on");
}
@Override
public void off() {
System.out.println("HallLight off");
}
}
4.LightFacade.java
package org.example.log.facade;
// 外观模式:提供一个统一的接口,用于访问子系统的一群接口
// 主要特征是定义一个高层接口,这个接口使得子系统更加容易使用
public class LightFacade {
private Light bedroomLight = new BedroomLight();
private Light hallLight = new HallLight();
public void lightOn() {
bedroomLight.on();
hallLight.on();
}
public void lightOff() {
bedroomLight.off();
hallLight.off();
}
}
5.Main.java
package org.example.log.facade;
public class Main {
public static void main(String[] args) {
// 通过门面系统调用子系统
LightFacade lightFacade = new LightFacade();
lightFacade.lightOn();
lightFacade.lightOff();
}
}
运行结果:
三.优点
1.减少系统的相互依赖,实现了子系统和客户端的耦合关系,使得子系统的变化不会影响到客户端
2.提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关系子系统具体实现,只需要和门面对象交互即可
3.提高安全性,不在门面对象中设置访问权限,就无法使用