【问题标题】:What is the appropriate design pattern for the following situation?对于以下情况,合适的设计模式是什么?
【发布时间】:2012-08-02 02:35:01
【问题描述】:

作为练习,我正在为 iPad 开发一个简单的绘图应用程序。 我正在使用UISplitView,将绘图视图作为详细视图。在主视图控制器中,我呈现(在表格视图中)到目前为止绘制的形状列表。

用户可以从主视图控制器编辑或删除任何形状,也可以通过在详细视图控制器中触摸来选择和编辑形状。

为了通知每个视图控制器对方所做的更改,我想过使用委托,但我不确定这是否是正确的使用模式。

首先,据我了解,当某个对象遇到他们不知道如何处理的事件时,应该使用委托。在这种情况下,他们将所有信息传递给委托并让它处理事件。这不是这里的情况,因为两个视图控制器都需要对信息做一些事情。在这里使用委托会导致代码重复。

我考虑不使用委托的另一个原因是,将来我可能希望其他视图控制器获取绘图更改的信息。我可以使用多个代表(一般来说这是一种好的做法吗?)但我也不确定这是否是一个好的解决方案。

我还应该考虑其他解决方案吗?

【问题讨论】:

    标签: ios design-patterns


    【解决方案1】:

    相反,我认为委托可能是在这里使用的正确模式 - 当您无法处理事件时,您不必委托only(尽管可能 em> 是您可以委托的一种情况)。

    相反,当您根本不知道该对象可能是什么时,可以考虑使用委托从另一个对象获取信息或从另一个对象获取信息。例如,Apple 在使用 UITableViews 时使用委托模式;在那个委托协议中,表格视图非常清楚在每种情况下要做什么,但仍然会在某些操作即将发生时通知您的代码。我认为这与您的情况非常相似。 (请注意,在 UITableView “数据源”中也存在与您的问题假设平行的情况,其中表格视图确实需要一些信息。)

    如果您真的不喜欢委托,您可以考虑使用的另一种技术是使用通知。您可以让每个控制器订阅特定的通知,然后让您的形状(或详细视图控制器)在可观察到的更改发生时发布 NSNotification 的实例。这样,您仍然可以处理发生在不同控制器中的事件,但无需维护委托列表。

    至于代码重复,只要在你开始遇到会重复的情况时考虑重构即可;也许您应该为公共代码设计一个委托或通知订阅者对象,然后只在每个其他控制器中执行特定于类的事情?

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多