您的位置:首页 > 新闻 > 热点要闻 > 设计模式——外观模式

设计模式——外观模式

2025/5/14 1:24:25 来源:https://blog.csdn.net/weixin_46073538/article/details/141165947  浏览:    关键词:设计模式——外观模式

设计模式——外观模式

  • 1.问题抛出
  • 2.定义
  • 3.代码实现
    • 3.1 类图
    • 3.2 代码
  • 4.总结

1.问题抛出

小明的爷爷已经60岁了,一个人在家生活:每次都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;操作起来都比较麻烦。所以小明给爷爷买了智能音箱,可以通过语音直接控制这些智能家电的开启和关闭。

2.定义

  1. 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
  2. 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
    定义

3.代码实现

3.1 类图

类图

3.2 代码

public class Light {public void on() {System.out.println("打开了灯....");}public void off() {System.out.println("关闭了灯....");}
}
public class TV {public void on() {System.out.println("打开了电视....");}public void off() {System.out.println("关闭了电视....");}
}
public class AirCondition {public void on() {System.out.println("打开了空调....");}public void off() {System.out.println("关闭了空调....");}
}

facade

public class SmartAppliancesFacade {private Light light;private TV tv;private AirCondition airCondition;public SmartAppliancesFacade() {this.light = new Light();this.tv = new TV();this.airCondition = new AirCondition();}public void say(String message) {if ("打开".equals(message)) {on();} else if ("关闭".equals(message)) {off();} else {throw new UnsupportedOperationException();}}private void on() {System.out.println("起床了");light.on();tv.on();airCondition.on();}private void off() {System.out.println("睡觉了");light.off();tv.off();airCondition.off();}
}

调用类

public class Client {public static void main(String[] args) {SmartAppliancesFacade smartAppliancesFacade = new SmartAppliancesFacade();smartAppliancesFacade.say("打开");smartAppliancesFacade.say("关闭");}
}

结果输出

起床了
打开了灯....
打开了电视....
打开了空调....
睡觉了
关闭了灯....
关闭了电视....
关闭了空调....

4.总结

  1. 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性
  2. 外观模式对客户端与子系统的耦合关系-解耦,让子系统内部的模块更易维护和扩展
  3. 通过合理的使用外观模式,可以帮我们更好的划分访问的层次
  4. 当系统需要进行分层设计时,可以考虑使用Facade 模式
  5. 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade 类,来提供遗留系统的比较清晰简单的接口,让新系统与 Facade 类交互,提高复用性
  6. 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。要以让系统有层次,利于维护为目的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com