结构型模式-外观模式
参考:https://www.jianshu.com/p/e1e1eb7d22cf
外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。
1.定义
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。
2.介绍
- 外观模式属于结构型模式。
- 外观模式也叫门面模式。
- 通常我们对API进行封装,都会用到外观模式,只是我们可能不知道而已。外观模式通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。
3.UML类图
角色说明:
- Facade(外观角色):对外的统一入口。
- Complex System(复杂系统):一般由多个子系统构成,负责具体功能的实现。
4.实现
5. 应用场景
- 为一个复杂的子系统提供一个简单接口,对外隐藏子系统的具体实现、隔离变化。
- 使用外观模式可以将一个子系统和使用它的客户端以及其它的子系统分离开来,这就提高了子系统的独立性和可移植性。
- 在构建一个层次化结构的时候,可以使用外观模式定义每一个层次对外交互的接口。这样,层与层之间只需要通过外观进行通信,从而简化层与层之间的依赖关系。
6. 优点
- 降低了客户端与子系统类的耦合度,实现了子系统与客户之间的松耦合关系。
- 外观类对子系统的接口封装,使得系统更易于使用。
- 提高灵活性,不管子系统如何变化,只要不影响门面对象,就可以自由修改。
7. 缺点
- 增加新的子系统可能需要修改外观类的源代码,违背了“开闭原则”。
- 所有子系统的功能都通过一个接口来提供,这个接口可能会变得很复杂。
8. Android中的源码分析
外观模式在Android中应用也非常广泛,比如Context类,里面封装了很多方法,还是以startActivity()方法为例。实际上startActivity()是通过ActivityManagerService来实现的,ActivityManagerService我们应该都有耳闻,但是实际开发中一般都用不到,通过封装的方式,Context类隐藏了这些细节,我们只要简单调个方法就可以启动一个新的Activity。
这就是外观模式在Android应用的例子了。当然这种应用比比皆是,我们平时开发也经常用的到。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术