欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > java23种设计模式-外观模式

java23种设计模式-外观模式

2025/6/30 6:24:32 来源:https://blog.csdn.net/weixin_47763579/article/details/145834031  浏览:    关键词:java23种设计模式-外观模式

外观模式(Facade Pattern)学习笔记

🌟 定义

外观模式属于结构型设计模式,提供一个统一的接口来访问子系统中的多个接口。它通过定义一个高层接口简化客户端与复杂子系统的交互。


🎯 适用场景

  1. 为复杂子系统提供简单入口
  2. 解耦客户端与子系统
  3. 分层构建系统(各层通过外观类交互)
  4. 遗留系统重构(用外观类封装旧接口)

🔧 模式结构

📐 类图

Client
Facade
-subsystemA: SubsystemA
-subsystemB: SubsystemB
-subsystemC: SubsystemC
+operation()
SubsystemA
+operationA()
SubsystemB
+operationB()
SubsystemC
+operationC()

🛠️ 核心组成

  1. Facade(外观角色)

    • 知道子系统功能
    • 将客户端请求委派给对应子系统对象
  2. Subsystem Classes(子系统角色)

    • 实现子系统具体功能
    • 不感知外观存在(可独立运行)

📝 代码示例

家庭影院场景

// 子系统类
class Lights {void dim() { System.out.println("灯光调暗"); }
}class SoundSystem {void on() { System.out.println("音响开启"); }
}class Projector {void down() { System.out.println("幕布降下"); }
}// 外观类
class HomeTheaterFacade {private Lights lights;private SoundSystem sound;private Projector projector;public HomeTheaterFacade() {this.lights = new Lights();this.sound = new SoundSystem();this.projector = new Projector();}public void watchMovie() {lights.dim();sound.on();projector.down();}
}// 客户端
public class Client {public static void main(String[] args) {HomeTheaterFacade facade = new HomeTheaterFacade();facade.watchMovie(); // 一键启动观影模式}
}

✅ 优点

  • 简化客户端使用复杂度
  • 客户端与子系统松耦合
  • 更好的访问控制(可限制直接访问子系统)
  • 符合迪米特法则(最少知识原则)

⚠️ 缺点

  • 过度使用会导致系统层级过多
  • 增加维护成本(修改子系统可能需调整外观)
  • 可能成为"上帝对象"(需注意职责划分)

🔄 相关模式对比

模式区别
中介者模式关注子系统间的通信协调
单例模式外观类常实现为单例
抽象工厂模式可与外观结合封装创建过程

💡 实践建议

  1. 优先考虑子系统重构而不是外观包装
  2. 保持外观类的单一职责
  3. 可创建多个外观类对应不同使用场景
  4. 通过依赖注入管理子系统对象

掌握外观模式的关键在于理解它作为系统门户的定位,合理使用可以显著提升系统的易用性和可维护性。

版权声明:

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

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

热搜词