- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
作为我模型的一部分,我有一个名为“Slide”的类,它有两个子类:“QuizzSlide”和“ImageSlide”。我还有另一个名为“SlideView”的类(这是我的观点的一部分),它有两个 child “QuizzSlideView”和“ImageSlideView”。
现在我要做的是浏览一组幻灯片并创建正确的 SlideView 来显示它们。问题是,要实例化 SlideView,我需要知道幻灯片的类型。 QuizzSlide 应该创建一个 QuizzSlideView,而 ImageSlide 应该创建一个 ImageSlideView。我看到两个选项:
内省(introspection)。我不喜欢内省(introspection),因为它意味着构建对象的类必须详尽地列出它可以处理的对象类型。如果我添加另一种类型的幻灯片,我必须修改构建器类。
使幻灯片创建其关联的 View 。所以我有一个 getView 函数,它被 Slide 的每个子级覆盖,以便为该幻灯片创建正确的 View 。这会起作用,并且会使维护更容易,但它会使程序变得一团糟,因为模型不应该包含对其所代表的 View 的引用。
差不多就这些了。我还有其他选择吗?关于如何将我的模型与我的 View 分离、根据模型类型构建正确的 View 并避免自省(introspection),有什么想法吗?
谢谢
最佳答案
为什么不是 Factory method Slide
类中的 createView()
,当在 QuizzSlide
中实现时返回一个 QuizzSlideView
而在 ImageSlide 中
返回指向正确模型的 ImageSlideView
。
这让我想起了 Iterator模式,其中 CreateIterator()
是工厂方法。
Iterator pattern in UML http://www.silversoft.net/docs/dp/hires/Pictures/itera040.gif
关于objective-c - 实例化一个对象的类型取决于另一个对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736736/
我是一名优秀的程序员,十分优秀!