下面是正文
外观模式
外观模式定义了一个将子系统的一组接口集中在一起的高层接口,以提供一个一致的界面。通过这个界面,客户端可以很方便的调用子系统的功能,而忽略子系统内部发生的变化。
优点
降低了子系统和客户的耦合度
例子
这里我们以智能家居回家、出门场景为例,子系统有:开灯、打开电视、打开空调。那么就将其回家、出门的这个场景作为门面,我们(客户端)只需要对场景操作,不需要了解子系统发生的变化。(例子如有不对,敬请指教)
智能灯 — 子系统
/**
* 电灯 子系统
*
* 有开关灯操作
* */
public class LightSubsystem {
//开灯
public void turnOnTheLight(){
System.out.println("电灯已经打开!");
}
//关灯
public void turnOffTheLight(){
System.out.println("电灯已经关闭!");
}
}
电视子系统
/**
* 电视子系统
*
* 打开、关闭电视
* */
public class TvSubsystem {
//打开
public void turnOnTheTv(){
System.out.println("电视已经打开");
}
//关闭
public void turnOffTheTv(){
System.out.println("电视已经打开");
}
}
空调—子系统
/**
* 空调子系统
*
* 打开空调,调节温度
*
* 关闭空调
* */
public class AirconditioningSubsystem {
//打开空调,调节温度
public void turnOnTheAC(){
System.out.println("空调已经打开,温度设置为28℃");
}
//关闭空调
public void turnOffTheAC(){
System.out.println("空调已经关闭");
}
}
场景门面模式
/**
* 门面类
*
* 提供回家、出门场景方案
*
* 将子系统的方法集中在这个门面类中
* */
public class SceneFacade {
private LightSubsystem lightSubsystem = null;
private TvSubsystem tvSubsystem = null;
private AirconditioningSubsystem airconditioningSubsystem = null;
public SceneFacade(){
this.lightSubsystem = new LightSubsystem();
this.tvSubsystem = new TvSubsystem();
this.airconditioningSubsystem = new AirconditioningSubsystem();
}
//回家
public void goHome(){
System.out.println("------------回家------------");
this.lightSubsystem.turnOnTheLight();
this.tvSubsystem.turnOnTheTv();
this.airconditioningSubsystem.turnOnTheAC();
}
//出门
public void goOut(){
System.out.println("------------出门------------");
this.lightSubsystem.turnOffTheLight();
this.tvSubsystem.turnOffTheTv();
this.airconditioningSubsystem.turnOffTheAC();
}
}
主入口
/**
* 门面模式主入口类
*
* 这里我们以智能家居回家、出门场景为例
* 子系统有:开灯、打开电视、打开空调
* */
public class FacadePatternMain {
public static void main(String[] args){
SceneFacade sceneFacade = new SceneFacade();
//回家
sceneFacade.goHome();
//出门
sceneFacade.goOut();
}
}
在这个模式里,我们只需要出现回家、出去的场景,场景这个门面就可以执行子系统的相关方法,而我们不必了解子系统的内部实现。只需要控制场景这一门面即可。
输出

[Java]设计模式源码
本文深入讲解了外观模式,一种在软件设计中简化复杂子系统调用的设计模式。通过智能家居场景的例子,展示了如何通过门面类降低子系统与客户端之间的耦合度,使客户端能更便捷地调用子系统功能。
777

被折叠的 条评论
为什么被折叠?



