编辑:原创2024-05-27 08:55:36浏览量:67772
了解智能家居(Facade)的都知道,通过简单的一两个按钮,就可以切换家里的模式,如居家模式、离家模式、观影模式等等,下面举两个详细的例子:
人下班回家时:
扫地机器人(Subsystem1)停止工作,回到充电站;空调打开(Subsystem2);
人离家上班时:
扫地机器人开始扫地;空调关闭;
模式定义
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
为子系统中的一组接口提供统一的接口。Facade定义了一个更高级的接口,使子系统更容易使用。
https://refactoringguru.cn/design-patterns/facade
智能家居系统通常集成了多个不同的子系统(如扫地机器人、空调等),并提供一个统一的界面来控制这些子系统。这种设计就非常类似于“外观模式”(Facade Pattern)。
模式实现
1.定义子系统
1.1.智能空调
接口
package com.example.designpattern.facade.subsystem;/** * 智能空调 * * @author hongcunlin */public interface SmartAirConditioner { /** * 开机 */ void powerOn(); /** * 关机 */ void powerOff();}
实现
package com.example.designpattern.facade.subsystem.impl;import com.example.designpattern.facade.subsystem.SmartAirConditioner;import org.springframework.stereotype.Service;/** * 智能空调 * * @author hongcunlin */@Servicepublic class SmartAirConditionerImpl implements SmartAirConditioner { @Override public void powerOn() { System.out.println("智能空调开机..."); } @Override public void powerOff() { System.out.println("智能空调关机"); }}
1.2.智能扫地机器人
接口
package com.example.designpattern.facade.subsystem;/** * 智能扫地机器人 * * @author hongcunlin */public interface SmartVacuumRobots { /** * 扫地 */ void clean(); /** * 回充电站 */ void recharge();}
实现
package com.example.designpattern.facade.subsystem.impl;import com.example.designpattern.facade.subsystem.SmartVacuumRobots;import org.springframework.stereotype.Service;/** * 智能扫地机器人 * * @author hongcunlin */@Servicepublic class SmartVacuumRobotsImpl implements SmartVacuumRobots { @Override public void clean() { System.out.println("智能扫地机器人开始扫地..."); } @Override public void recharge() { System.out.println("智能扫地机器人回充电站"); }}
2.定义外观
接口
package com.example.designpattern.facade.facade;/** * 米家外观模式 * * @author hongcunlin */public interface MiJiaFacade { /** * 回家 */ void goHome(); /** * 离家 */ void leaveHome();}
实现
package com.example.designpattern.facade.facade.impl;import com.example.designpattern.facade.facade.MiJiaFacade;import com.example.designpattern.facade.subsystem.SmartAirConditioner;import com.example.designpattern.facade.subsystem.SmartVacuumRobots;import org.springframework.stereotype.Service;import javax.annotation.Resource;/** * 米家外观实现 * * @author hongcunlin */@Servicepublic class MiJiaFacadeImpl implements MiJiaFacade { /** * 智能空调 */ @Resource private SmartAirConditioner smartAirConditioner; /** * 智能扫地机器人 */ @Resource private SmartVacuumRobots smartVacuumRobots; @Override public void goHome() { // 空调开机 smartAirConditioner.powerOn(); // 扫地机器人回冲 smartVacuumRobots.recharge(); } @Override public void leaveHome() { // 空调关机 smartAirConditioner.powerOff(); // 扫地机器人扫地 smartVacuumRobots.clean(); }}
3.测试
package com.example.designpattern.facade;import com.example.designpattern.facade.facade.MiJiaFacade;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;/** * 外观模式测试 * * @author hongcunlin */@SpringBootTestpublic class DesignPatternTest { /** * 米家外观 */ @Resource private MiJiaFacade miJiaFacade; @Test public void test() { // 回家 miJiaFacade.goHome(); // 离家 miJiaFacade.leaveHome(); }}
可以看到,结果是符合我们预期的结果的。
最后
本文通过外观模式,模拟实现小米智能家居系统。只要留心发现,日常生活处处充满设计模式的美感。后续继续闲聊23种设计模式中的其他类型。
本文链接:https://www.jiudexuan.com/baike/6716.html版权声明:本网站为非赢利网站,作品与素材版权均归作者所有,如内容侵权与违规请发邮件联系,我们将在三个工作日内予以改正,请发送到 vaiptt#qq.com(#换成@)。
© 2025 九德轩手游 丨TXT地图丨网站地图丨备案号:渝ICP备2023010047号丨渝公网安备50011802010927丨联系我们