欢迎大家来到IT世界,在知识的湖畔探索吧!
概述
使用场景
- 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
- 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
- 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。
优缺点
优点
- 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
- 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
缺点
- 不符合开闭原则,修改很麻烦;
案例实现
日常中都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;操作起来都比较麻烦。通过语音直接控制这些智能家电的开启和关闭。
UML
欢迎大家来到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