外观模式又叫门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一的接口,外部应用不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性,外观模式包括以下主要角色:
【案例】
小明的爷爷已经60多岁了,一个人在家生活。每次都需要打开灯、打开电视、打开空调,睡觉是要关闭空调、关闭电视、关闭灯。操作起来比较麻烦。所以小明给爷爷买了智能音箱,可以通过语音直接控制这些智能家电的开启和关闭。
public class FacadeTest { //客户端类
public static void main(String[] args) {
SmartFacade smartFacade = new SmartFacade();
smartFacade.say("打开家电");
System.out.println("------------");
smartFacade.say("关闭家电");
}
}
class Light{//子系统角色
public void on(){System.out.println("打开电灯");}
public void close(){System.out.println("关闭电灯");}
}
class TV{//子系统角色
public void on(){System.out.println("打开电视");}
public void close(){System.out.println("关闭电视");}
}
class AirCondition{//子系统角色
public void on(){System.out.println("打开空调");}
public void close(){System.out.println("关闭空调");}
}
class SmartFacade{//外观角色
private TV tv;
private Light light;
private AirCondition airCondition;
public SmartFacade() {
this.tv = new TV();
this.light = new Light();
this.airCondition = new AirCondition();
}
public void say(String message){
if (message.contains("打开")){
on();
}else if (message.contains("关闭")){
close();
}else{
System.out.println("小度正在努力学习中哦~~~");
}
}
private void on(){
light.on();
tv.on();
airCondition.on();
}
private void close(){
light.close();
tv.close();
airCondition.close();
}
}
1、对分层结构系统构建时,使用外观模式定义子系统中的每层入口点可以简化子系统之间的依赖关系
2、当一个系统的子系统很多时,外观模式可以为系统设计一个简单的接口共外界访问
3、当客户端给与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_60117382/article/details/123668690
内容来源于网络,如有侵权,请联系作者删除!