type
status
date
slug
summary
tags
category
icon
password
💡
外观模式在平时较少提到,但是我们在开发中会自然的用到外观模式,思想和实现都比较简单。它的设计思想是:为了使复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。也就是设计一个类把多个类的功能合并在一起构成我们需要的方法,这样上层调用就很简单,后端开发的controller、service、dao三层结构其实就是外观模式。

使用场景

  • 如果你需要一个指向复杂子系统的直接接口,且该接口的功能有限,则可以使用外观模式。子系统通常会随着时间的推进变得越来越复杂。即便是应用了设计模式,通常你也会创建更多的类。尽管在多种情形中子系统可能是更灵活或易于复用的,但其所需的配置和样板代码数量将会增长得更快。为了解决这个问题,外观将会提供指向子系统中最常用功能的快捷方式,能够满足客户端的大部分需求。
  • 如果需要将子系统组织为多层结构,可以使用外观。创建外观来定义子系统中各层次的入口。你可以要求子系统仅使用外观来进行交互,以减少子系统之间的耦合。

优缺点

优点:
  • 对客户程序隐藏子系统的细节,减少客户端对于子系统的耦合,能够拥抱变化
  • 外观类对子系统的接口封装,使得系统更易于使用
缺点:
  • 外观类接口膨胀,由于子系统的接口都有外观类统一对外暴露,使得外观类API接口较多,在一定程度上增加了用户使用成本
  • 外观类没有遵循开闭原则,当业务出现变更时,需要直接修改外观类

结构

notion image

模板代码

使用实例ContextImpl

ContextImpl封装了startActivitystartServicesendBroadcast一系列核心方法,而各个方法内部又是通过调用其它类来实现的

📎 参考

适配器模式(RecyclerView)装饰器模式(ContextWrapper)
LuluNotion
LuluNotion
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
🎉NotionNext 4.0即将到来🎉
-- 感谢您的支持 ---
👏欢迎更新体验👏