我正在查看代码库,我经常会看到类似的内容:
public class SomeClass
{
protected static SomeClass myObject;
//...
public static SomeClass getObject()
{
return myOjbect
}
}
我想确保理解这背后的目的。它是否确保一个类的实例共享,即使它被多次实例化?我不确定这里的词汇,否则我会搜索答案,所以如果这个模式有名字,请告诉我。
此外,这似乎是一个鸡蛋和鸡蛋的定义,因为该类包含类的类型的对象。为什么这不是荒谬的?
谢谢!
答案 0 :(得分:4)
答案 1 :(得分:4)
这实际上只适用于Singleton Pattern,其中只有一个类的实例。虽然它有其用途,但Singleton经常被滥用和滥用(通常将程序编程伪装成OO)。它也经常出现在Java AWT或Swing的示例代码中,您通常在其中继承Frame
/ JFrame
,并在同一类中的main
方法中创建实例。
此外,这似乎有点 鸡肉和鸡蛋的定义因为 class包含该类型的对象 班上的。为什么不这样呢 自相矛盾?
为什么你认为它是?该类主要描述此类型的成员实例 - 但static
成员不属于实例,它属于类本身,因此它没有任何关系具有班级的“蓝图”角色。由于这个原因,静态成员实际上并不是OO。
但即使在实例级别,您也可以使用相同类型的引用。例如,链表中的条目通常会有两个对下一个和上一个条目的引用,这些条目属于同一类。
答案 2 :(得分:3)
您提到的模式称为“Singleton”,但是从您的代码示例中不清楚这是否真的是预期的。由于成员受到保护,我猜不会 - 如果有子类,则可能没有单个实例。
答案 3 :(得分:1)
这并不罕见;它可以是实现Singleton模式的好方法。也可以有其他用途 - 有时候你会想要一些 - 而不是更多 - 给定类的对象;这个班级是一个很好的地方。如果您不希望其他类能够创建此类的对象,则通常也会为该类提供私有构造函数。
这并不矛盾,因为编译器在完全编译类之前可以知道对类的引用。后来 - 如果你想以这种方式思考它 - 它可以“填补空白”。
答案 4 :(得分:1)
它叫做Singleton。您确保只创建给定类的ONE(1)对象。
您应该添加一个私有的构造函数,因此唯一创建该对象的是该类。
public class SomeClass
{
// Using private constructor
protected static SomeClass myObject = new SomeClass();
private SomeClass(){
//...
}
public static SomeClass getObject()
{
return myOjbect
}
}
此处更多,在Wikipedia
您可能需要查看Factory Pattern