我有一个实例化类层次结构的类。界面应该通过呈现单个类引用来隐藏所有内部层次结构。 (中间级别的类的接口应该以相同的方式隐藏内部实现细节。)我在确定如何将接口参数流向最低级别并将状态更改流向最高级别时遇到一些困难。我想出的东西变得混乱。
我已经看到了对黑板模式的一些讨论,但是,从我所看到的,它看起来是临时的,扁平的而不是分层的。 (虽然平坦与分层可能并不重要。)
我所拥有的课程是日历视图,子类化UIView。层次结构包括一个头类,一个网格类(多次实例化),一个tile类(多次实例化),以及一些辅助类。它基于Keith Lazuka在Objective C中的kal日历。我决定根据我的需要重新组织它,并且在我引入灵活性问题之前想重新考虑它的这一部分。
我的问题在标题中。
答案 0 :(得分:0)
我已经确定KVO(Key Value Observer)设计模式对于从较低级别到顶部的冒泡状态信息是有意义的。仅在每个相应层处观察到需要向上流动的状态信息。
在这个应用程序中,一个tapped tile事件被发送到下一级别(网格级别)的观察者,告诉它用户选择了一个日期,这是tile类的一个属性。
在网格级别,它会根据其当前状态以及观察者从切片接收的新信息更改其状态。 (在我的日历中,用户可以通过选择开始日期和结束日期来选择日期范围,并且可以继续点击切片以更改其日期范围选择。)这在网格级别更改状态转换为开始和/的更改或结束日期,因此更新NSDictionary属性。
在日历级别,观察者会看到startDate / endDate字典更改。无论它来自哪个网格(有两个网格,并且一次只有一个是活动的。图块和日历不需要知道这一点)日历的开始和结束日期会更新。
日历是一个视图,被植入应用程序的其他视图之一,初始化为要显示的月份,并具有选定的日期范围(开始和停止日期)。信息从顶部通过指针流向任何层的每个直接子视图。这些子视图负责保持其子视图配置。我已经消除了显式添加委托方法或回调的需要,这简化了从上到下的连接。连接仅在层次结构中位于上方或下方的直接级别。
毕竟这看起来似乎并不多,因为它看起来很简单。但直到我花了一段时间思考它才明白。我希望它能为他人提供一些自己代码的想法。我仍然想知道是否有其他建议回应我的问题。