1

在我的情况下,更好的解决方案是什么,如何设计类以使它们不是很耦合?

我有一个库 (API),它提供了一些功能(例如,使用subscribe方法订阅流式外汇价格)。我有一个 API 客户端,它告诉 API 它想要获得的价格。API 通过一些接口(例如SubscriptionStatus)和方法提供反馈SubscribeSuccess(Subscription) and SubscribeFailed(Subscription)。在 API 客户端中,我有一个活动订阅列表 ( List<Subscription> activeSubscriptions)。而且我希望 API 客户端只对订阅成功做出反应(只需将订阅添加到列表中)。在其他情况下 - 只需打印要记录的消息。组织订阅侦听器和 API 客户端之间关系的最佳方式是什么?选项可能是:

  1. 将 API 客户端实例传递给订阅侦听器,以便它可以调用apiClient.addSubscription(subscription)
  2. API客户端实现SubscriptionStatus接口并管理这些事件(失败,内部成功:activeSubscriptions.add(subscription))。对比:有很多类型的动作,每个动作都有自己的监听器。所以 Api Client 将是真正的大类。
  3. 用一种方法定义自己的接口,SubscriptionSuccess(subscription)让API客户端实现?
  4. 你的选择?

任何关于主题的想法表示赞赏!

谢谢!

4

2 回答 2

1

我会选择选项2,有一个问题。如果SubscriptionStatus接口真的很大,并且你知道一些客户只想实现其中的一部分,你可以提供一个基本的空超类,让客户扩展它(让它abstract强制它们)

类似的东西BaseSubscriptionStatus对所有方法都有空实现,并让用户覆盖它想要的那些。另一种选择是

throw UnsupportedOperationException("This method is not supported by your implementation of SubscriptionStatus. Please override it");

对于每个基本方法而不是空实现。

当然,您可以保留SubscriptionStatus接口以进行适当的依赖注入和可测试性,只需BaseSubscriptionStatus实现它即可。

于 2012-01-23T16:50:16.103 回答
0

我会选择选项二。这将为最终用户提供最大的灵活性,并能够在他们的情况下更有效地响应流媒体问题。

于 2012-01-23T16:46:13.903 回答