我在查看代码库时经常看到类似这样的内容:
public class SomeClass
{
protected static SomeClass myObject;
//...
public static SomeClass getObject()
{
return myOjbect
}
}
我想确保我理解这背后的目的。是否确保类的一个实例即使被多次实例化也能被共享?我不确定这里的词汇,否则我会搜索答案,所以如果这个模式有名字,请告诉我。
此外,这似乎有点鸡生蛋还是蛋生鸡的定义,因为该类包含该类类型的对象。为什么这实际上并不矛盾?
谢谢!
最佳答案
这真的只在 Singleton Pattern 中常见只有这个类的一个实例。虽然它有其用途,但 Singleton 经常被过度使用和滥用(通常是为了将过程编程伪装成 OO)。它也经常出现在 Java AWT 或 Swing 的示例代码中,您通常在其中子类化 Frame
/JFrame
,并在 main
中创建一个实例同一个类中的方法。
Also, this seems a little chicken-and-egg definition because the class includes an object of the type of the class. Why isn't this actually paradoxical?
为什么会这样?类主要描述了该类型的实例有哪些成员——但是一个static
成员不属于实例,它属于类本身,所以它没有与类(class)的“蓝图”角色有关的任何事情。因此,静态成员确实有点非面向对象。
但即使在实例级别,您也可以拥有相同类型的引用。例如,链表中的一个条目通常有两个对下一个和上一个条目的引用,它们属于同一类。
关于同一类型类内的Java成员对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3158544/