Sta*_*123 7 c++ oop design-patterns prototype
来自 GoF 的书:
原型对于像 C++ 这样的静态语言特别有用,其中类不是对象,并且在运行时很少或没有类型信息可用。在像 Smalltalk 或 Objective C 这样的语言中,它提供相当于原型(即类对象)以创建每个类的实例的内容并不重要。这种模式内置于基于原型的语言中,如 Self [US87],其中所有对象的创建都是通过克隆原型进行的。
“类不是对象”是什么意思?
不总是这样吗?
一个类是一个对象是什么意思?
“类不是对象”是什么意思?
听起来就是这样。在某些语言中,类本身也是可以向其发送消息的对象。例如,为了创建类的实例(即新对象),您将消息发送+alloc到该类(然后通常向生成的对象发送消息-init:
Foo *newFoo = [[Foo alloc] init];
Run Code Online (Sandbox Code Playgroud)
情况不总是如此吗?
不,见上文。另请参阅面向对象语言中的类是否是对象和Objective-C 中的类是对象吗?。除 Objective-C 之外的示例还包括 Smalltalk、Scheme 和 Dylan。
类作为对象意味着什么?
这意味着您可以像处理任何其他对象一样处理类。详细信息因语言而异。在 Objective-C 中,类是一个对象,因为它是Class元类的实例。Objective-C 区分了实例方法(即可以发送到类实例的消息)和类方法(即可以发送到类本身的消息)。例如,拥有类的共享实例和获取该共享对象的类方法是很常见的:
NSFileManager *fileManager = [NSFileManager defaultManager];
Run Code Online (Sandbox Code Playgroud)
请注意,我们实际上并没有在这里分配对象,只是向类询问可能已经存在或可能不存在的共享实例(该类管理该实例)(如果不存在,该类通常会创建它)。