我浏览了 GNUStep 的 NSNumber 实现的源代码,以了解工厂方法实现是如何在那里工作的。
从那里我可以理解的是,对于所有 initWithXYZ 类型的方法,我们都有 NSNumber 和空白实现。NSTemporaryNumber 就像层次结构中的一个中间类,它实现了所有 initWithXYZ 方法,其中它实际上创建了特定类型的对象,自动释放自身并返回创建的对象。
此外,allocWithZone 被覆盖以避免创建 NSNumber 对象并创建 NSTemporaryNumber 的对象,否则创建特定类型的对象。
我不明白的是,NSNumber 本身不能做同样的事情吗?为什么要给出空白实现,创建特定类型的对象,然后自动释放自我。
此外,如果我们在 NSNumber 本身中实现了 createXYZ 方法,为什么还要使用 initWithXYZ 方法?
如果我必须为我的项目实现一个工厂实现,比如说我有两个 mediaItems、video、audio 和 photo 等,我有单独的类和相应的枚举,我将它们传递给 initWithMediaType,它们将创建一个正确子类的对象,返回它并摧毁自己。
有两个类,如 NSNumber 和 NSTemporaryNumber:比如 Media 和 TemporaryMedia,一个具有空白实现,另一个具有上述实现?
我应该做这样的事情吗?这是我们必须在 Objective C 中实现工厂模式的方式吗?
我的问题可能看起来很愚蠢,但我来自 Java、C++ 背景,情况看起来不同。目的可能是相同的,但我发现很难理解 Objective C 的方式,因为它没有抽象类。
链接到源: http ://www.koders.com/objectivec/fid46956186C20201706AFE1744AA7AFEEE09D1FE5A.aspx