objective-c - 实例化一个对象的类型取决于另一个对象的类型

标签 objective-c oop design-patterns

作为我模型的一部分,我有一个名为“Slide”的类,它有两个子类:“QuizzSlide”和“ImageSlide”。我还有另一个名为“SlideView”的类(这是我的观点的一部分),它有两个 child “QuizzSlideView”和“ImageSlideView”。

现在我要做的是浏览一组幻灯片并创建正确的 SlideView 来显示它们。问题是,要实例化 SlideView,我需要知道幻灯片的类型。 QuizzSlide 应该创建一个 QuizzSlideView,而 ImageSlide 应该创建一个 ImageSlideView。我看到两个选项:

  1. 内省(introspection)。我不喜欢内省(introspection),因为它意味着构建对象的类必须详尽地列出它可以处理的对象类型。如果我添加另一种类型的幻灯片,我必须修改构建器类。

  2. 使幻灯片创建其关联的 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/

相关文章:

objective-c - AnyObject 到 NsDictionery

javascript - 我怎样才能完全用 JavaScript 编写一个 iPhone 应用程序而不只是一个 Web 应用程序?

iphone - "SHK.h"找不到文件

ios - 构造为 ViewModel

C# : Whether this approach is thread-safe

java - 关联与聚合

java - 如何确保在所有子类中都使用一个变量?

java - 为什么 Java 中的 Object 类包含 protected 方法?

c# - 验证域实体中的唯一值

Android 仪表板图标大小