【发布时间】:2013-02-03 14:10:12
【问题描述】:
在我的应用程序中,我有多个 UITableViewCell 子类。我使用工厂类来实例化正确的类型并将它们提供给需要它们的人。工厂类获取一个参数,该参数是表示单元的数据对象。我认为这没关系,因为工厂是控制器的一部分。
Cellfactory* factory = [[Cellfactory alloc ] initWithData:data];
当该数据对象与工厂类中的视图表示进行映射时,问题就出现了。我想到了 2 个解决方案:
为了保留一个字典与映射,键将是数据对象类的字符串表示,值将是负责呈现该数据对象的视图类的字符串表示。这样,当工厂被要求提供基于数据对象的视图时,它将通过查看地图字典来知道要实例化哪个类。不利的一面是,如果您添加另一个数据对象,您也需要修改工厂方法(在其字典中添加一个新条目)
一种更灵活的解决方案,无论您添加多少新对象,都不需要修改工厂方法,即保留负责在数据对象内部呈现数据对象的视图类的名称。但这将模型与视图耦合在一起,并且不知何故让模型不得不提供有关渲染的信息。
那么,这两者中哪一个是更好的长期选择?有没有其他替代方案可以击败他们?
【问题讨论】:
标签: objective-c oop factory factory-pattern