外观模式(Facade)

外观模式(Facade)概述又名门面模式 是一种通过为多个复杂的子系统提供一个一致的接口 而使这些子系统更加容易被访问的模式 该模式对外有一个统一接口 外部应用程序不用关心内部子系统的具体的细节 这样会大大降低应用程序的复杂度 提高了程序的可维护性 外观 Faca

欢迎大家来到IT世界,在知识的湖畔探索吧!

概述

使用场景

  • 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
  • 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
  • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

优缺点

优点

  • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

缺点

  • 不符合开闭原则,修改很麻烦;

案例实现

日常中都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;操作起来都比较麻烦。通过语音直接控制这些智能家电的开启和关闭。

UML

外观模式(Facade)



欢迎大家来到IT世界,在知识的湖畔探索吧!

各个子系统

package top.simba1949.facade; import lombok.extern.slf4j.Slf4j; / * @author anthony * @datetime 2023/7/22 15:00 */ @Slf4j public class AirConditioner { public void on() { log.info("AirConditioner 被打开了"); } public void off() { log.info("AirConditioner 被打开了"); } }

欢迎大家来到IT世界,在知识的湖畔探索吧!

欢迎大家来到IT世界,在知识的湖畔探索吧!package top.simba1949.facade; import lombok.extern.slf4j.Slf4j; / * @author anthony * @datetime 2023/7/22 14:56 */ @Slf4j public class Light { public void on() { log.info("Light 被打开了"); } public void off() { log.info("Light 被打开了"); } }
package top.simba1949.facade; import lombok.extern.slf4j.Slf4j; / * @author anthony * @datetime 2023/7/22 14:59 */ @Slf4j public class TV { public void on() { log.info("TV 被打开了"); } public void off() { log.info("TV 被打开了"); } }

外观者

欢迎大家来到IT世界,在知识的湖畔探索吧!package top.simba1949.facade; import lombok.extern.slf4j.Slf4j; / * @author anthony * @datetime 2023/7/22 14:56 */ @Slf4j public class SmartSpeakerFacade { private Light light; private TV tv; private AirConditioner airConditioner; public SmartSpeakerFacade() { this.light = new Light(); this.tv = new TV(); this.airConditioner = new AirConditioner(); } public void sayMessage(String message) { // 解析语音 if ("on".equalsIgnoreCase(message)) { light.on(); tv.on(); airConditioner.on(); } else if ("off".equalsIgnoreCase(message)) { light.off(); tv.off(); airConditioner.off(); } else { log.info("我还听不懂你说的!"); } } }

客户端(访问类)

package top.simba1949.facade; / * 此类作为客户端去访问具体的方法 * * @author anthony * @datetime 2020/5/19 10:03 */ public class FacadeApplication { public static void main(String[] args) { SmartSpeakerFacade smartSpeakerFacade = new SmartSpeakerFacade(); smartSpeakerFacade.sayMessage("off"); } }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/124690.html

(0)
上一篇 1小时前
下一篇 1小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信