监听模式 - 我可以通过两种方式实现它,哪一个?

时间:2013-11-29 16:35:14

标签: design-patterns

我有一个Android应用程序。 在其中,用户详细信息(姓名,电子邮件,性别,偏好,统计数据)在登录后立即下载。

我有一个Downloader类,它执行API调用并接收数据,然后将所有用户数据存储在UserDataAndStats类中。

我有一个接口IOnUserDetailsReceivedListener,每个对数据感兴趣的类都可以实现它并接收用户数据。

我需要在几个地方提供用户详细信息。 我有两种方法可以解决这个问题:

a)使对用户数据感兴趣的所有活动实现IOnUserDetailsReceivedListener,并在方法onUserDetailsAndStatsReceivedListener中,他们可以获取每个变量的值

b)让一个类实现这个接口,获取数据的值并将其存储在app范围的变量中,稍后我可以通过调用该类及其getter来访问它

我该怎么办?

1 个答案:

答案 0 :(得分:1)

当然,前者有一些变化。这是Reactive Programming的一个很好的例子。你有一个活动。只是处理它然后让任何感兴趣的一方都可以访问体现其状态的实体,这充满了危险。首先,你必须处理并发。访问正在进行或多次更新时更新。但也有一个事实是,州版本往往会变得更加丑陋。为什么?因为你的代码将开始填写决定基于大量条件测试做什么的事情,并且这些条件会变得非常快。例如,具有一些属性的对象(可能具有可能具有n个不同的状态),根据定义,可以处于n到某些幂状态之一(指数复杂性问题)。

尽可能让对象跟踪他们自己的状态

另外,考虑使用一些合成事件。例如,您可能有一些消费者只对消息的到达感兴趣,而其他消费者则处于一些更加处理的形式,因此您可以让一个处理程序监听到达,重新构建项目,然后广播另一个带有更多处理的消息,下游消费的以域为中心的实体。