我浏览了GNUStep的NSNumber实现的源代码,以了解工厂方法实现在那里如何工作。为什么我们有NSNumber和NSTemporaryNumber作为两个不同的类?
从那里我能理解什么是我们的NSNumber空白实施所有initWithXYZ样的方法。而NSTemporaryNumber在层次结构中表现得像一个中间类,它实现了所有initWithXYZ方法,实际上它创建了特定类型的对象,自动释放自己并返回创建的对象。
而且allocWithZone是重写,以避免NSNumber的对象的创建和打造NSTemporaryNumber的对象,如果它是如此,否则创建特定类型的对象。
我不明白的是,不能在同一个东西被自己的NSNumber做? 为什么根本没有实现空白的实现,创建特定类型的对象,然后autorelease self。
此外,如果我们在自己的NSNumber方法createXYZ实现,为什么initWithXYZ方法呢?
如果我要实现我的项目在那里说,我有两个mediaItems,视频,音频和照片等 对此我有不同的类和相应的枚举,我传给谁initWithMediaType将创建的对象的工厂实现正确的孩子课堂,返回并摧毁自己。
有两个类喜欢的NSNumber和NSTemporaryNumber:说媒体和上述TemporaryMedia,一个与其他与实现空白的实现?
我应该这样做吗? 这是我们必须在目标C中实现工厂模式的方式吗?
我的问题可能有点傻biut我来自一个Java,C++背景里的东西看起来不同。 目的可能是相同的,但我发现难以理解Objective C的方式,因为它没有抽象类。
链接到源: http://www.koders.com/objectivec/fid46956186C20201706AFE1744AA7AFEEE09D1FE5A.aspx
非常感谢这个解释。 但我仍然有一个疑问。 Cant NSNumber的适当的init方法创建了正确的类的对象并销毁NSNumber实例,而不是首先创建一个NSTemporaryNumber并要求它做同样的事情? 也.. 我们也有一些'创造'的方法,他们是否实现抽象工厂模式? 以及这种方法的可用性,我们需要有一个类集群? – 2012-04-19 05:45:22