我正在阅读GoF书籍,在原型部分的开头我读了这篇:
此优势主要适用于不将类视为第一类对象的C++等语言.
我从来没有使用过C++,但我对OO编程有很好的理解,然而,这对我来说并没有任何意义.任何人都可以详细说明这一点(我使用过\ use:C,Python,Java,SQL,如果有帮助的话.)
对于要成为第一类对象的类,语言需要支持诸如允许函数将类(非实例)作为参数,能够在容器中保存类以及能够从函数返回类的操作.
有关具有第一类类的语言的示例,请考虑使用Java.任何对象都是其类的实例.该类本身就是java.lang.Class的一个实例.
对于其他人来说,这是完整的报价:
"减少子类化.工厂方法(107)经常产生与产品类层次结构平行的Creator类的层次结构.原型模式允许您克隆原型而不是要求工厂方法创建新对象.因此,您不需要创建者类层次结构.这个好处主要适用于像C++这样不会将类视为第一类对象的语言.像Smalltalk和Objective C这样的语言得到的好处少,因为你总是可以使用类对象作为类对象已经像这些语言中的原型一样." - GoF,第120页.
正如史蒂夫所说,
我发现它很微妙,因为人们可能已经将其理解为暗示/ classes /类不被视为C++中的第一类对象.如果GoF使用的相同单词出现在一个不太正式的环境中,那么它们可能具有预期/实例/而不是类.这种区别对于/你/来说似乎并不微妙./ I /,然而,确实需要考虑一下.
我相信这种区别很重要.如果我没有弄错的话,除了编译的C++程序之外,没有必要保留任何可以重构创建对象的类的工件.IOW,使用Java术语,没有/ Class/object.