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