许多 Android 应用程序都包含自己的 BaseActivity 类,应用程序中的所有活动都扩展了该类。这很有用,因为它为放置大多数/所有活动共有的功能提供了一个中心位置。拥有 BaseActivity 的主要缺点是您无法使用任何 Activity 子类(ListActivity 等)。
一种替代方法是使用 ActivityDelegate。这为功能提供了一个中心位置,同时仍然允许您使用 Activity 子类。它也可以说更具可测试性,因为它使用组合而不是继承。
当 BaseActivity/ActivityDelegate 变得太大且过于复杂时,这两种解决方案都可能导致大量意大利面条式代码。一个可能的解决方案是使用委托模式,但将功能拆分为许多不同的委托。这减少了代表中的意大利面条代码,但是活动变得更加复杂 - 他们现在正试图将他们的 on* 方法转发给许多不同的代表,而不仅仅是一个。
所有这些问题的可能解决方案是使用委托管理器。代表管理器跟踪应用程序中所有较小的代表。活动将其 on* 方法转发给委托管理器,委托管理器将它们转发给所有单独的委托。这完成了以下所有工作:
- 重复数据删除代码 - 所有常见功能都放入其中一个委托中
- 允许使用 Activity 子类
- 所有活动中的简单代码 - 所有 on* 方法仅转发给一个类
- 易于测试 - 轻松模拟 Delegates 和 Delegate Manager 周围的所有内容以进行单元测试
有没有人尝试过使用这种模式?如果是这样,它是如何进行的?