【问题标题】:Connection Manager: Singleton or not Singleton?连接管理器:单例还是非单例?
【发布时间】:2011-05-05 10:17:01
【问题描述】:

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

这么说,您认为ConnectionManager 是否是Singleton 更好?

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

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

【问题讨论】:

    标签: cocoa-touch ios design-patterns singleton


    【解决方案1】:

    我和你有过类似的想法,最终得到了这个模式:

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

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

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

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

    把它们连接在一起......

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

    【讨论】:

      【解决方案2】:

      你可以看到this other post:。 我认为它可能很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多