连接管理器:Singleton还是不Singleton?

时间:2011-05-05 10:17:02

标签: cocoa-touch ios design-patterns singleton

我的iOS应用程序对Web服务提出了很多不同的请求。每个请求都是对ConnectionManager对象的方法的调用。当响应从Web服务到达时,调用委托的方法来通知感兴趣的接收者。此外,为了使会话保持活动状态,每X秒轮询一次是必需的。

这样说,在你看来,如果ConnectionManager是单身人士还是没有?

单例更简单(因为我不必将ConnectionManager的引用传递给所有需要向Web服务请求的人,或者我不必创建更多的ConnectionManagers)。而且,很容易处理轮询问题:我只需在ConnectionManager上添加两个方法startPolling和stopPolling。但是我不喜欢使用带有单例的委托(因为只有一个委托,如果没有一个集合时响应就会发生什么?)同时我不喜欢使用通知。我也不喜欢单身人士:)

您对替代模式有什么建议吗?

2 个答案:

答案 0 :(得分:5)

我和你一样经历了类似的思考,并最终得到了这种模式:

ConnectionManager [singleton] - 负责维护与服务器的连接并提交&接收请求

ConnectionQueue [singleton] - 存储一堆等待完成的请求

请求 - 每次需要从服务器创建时创建。它包含所有请求数据(url,params等)和对委托的引用。

响应 - 从服务器检索的数据的容器以及原始请求。

将它们连在一起......

  1. ConnectionManager在启动时启动,它会创建ConnectionQueue
  2. 当需要调用服务器时,创建一个Request对象,传入所有必需的参数并将其添加到ConnectionQueue
  3. 队列让经理知道有需要处理的请求
  4. 经理从队列中删除请求&调用服务器
  5. 收到数据
  6. 管理员创建响应并将其发送回委托。

答案 1 :(得分:0)

您可以看到this other post:。 我认为这很有用。