2012-08-01 101 views
0

作为一项练习,我正在为iPad设计一个简单的绘图应用程序。 我正在使用UISplitView,图纸视图为详细视图。在主视图控制器中,我呈现(在表格视图中)到目前为止绘制的形状列表。以下情况的适当设计模式是什么?

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

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

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

我正在考虑不使用委托的另一个原因是,将来我可能希望其他视图控制器获取图形中更改的信息。我可以使用多个代表(这是一般的良好习惯吗?),但我不确定这是一个好的解决方案。

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

回答

0

相反,我认为代表可能是在这里使用正确的模式 - 你不一定委托只有当你无法处理事件(尽管这可能一个情况下,你会委派)。

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

另一种技术,如果您真的死了,反对代表,将是使用通知。您可以让每个控制器订阅特定通知,然后在可观察到的更改发生时让您的形状(或详细视图控制器)发布NSNotification的实例。这样,您仍然可以处理发生在不同控制器中的事件,但不需要维护委托列表。对于代码复制,只要考虑重构,当你开始遇到你会复制的情况;也许你应该为公共代码设计一个委托或通知订阅者对象,然后在每个其他控制器中只做类特定的事情?