2010-07-01 90 views
3

的我在看一个代码库和我经常看到这样的:Java成员对象的内部类相同类型

public class SomeClass 
{ 
protected static SomeClass myObject; 

//... 

public static SomeClass getObject() 
{ 
    return myOjbect 
} 
} 

我想确保我的理解这背后的目的。是否确保该类的一个实例即使被多次实例化也会被共享?我不知道这里的词汇,否则我会寻找答案,所以如果这个模式有一个名字,请让我知道。

此外,这似乎有点鸡和蛋的定义,因为该类包括类的类型的对象。为什么这不是真的矛盾呢?

谢谢!

回答

3

这确实是唯一的共同与Singleton Pattern那里是只有这个类的一个实例。虽然它有其用途,但Singleton经常被滥用和滥用(通常是将程序性编程伪装成OO)。它也经常出现在Java AWT或Swing的示例代码中,您通常在其中创建子类Frame/JFrame,并在同一类中的main方法中创建实例。

此外,这似乎有点 鸡和蛋的定义,因为 类包含类的 类型的对象。为什么这不是实际上 似是而非呢?

你为什么认为这是?该类主要描述此类型的成员实例 - 但static成员不属于某个实例,它属于该类本身,因此它与该类的“蓝图”角色没有任何关系。因此,静态成员实际上有些非OO。

但即使在实例级别上,也可以具有相同类型的引用。例如,链接列表中的条目通常会有两个对同一类的下一个和前一个条目的引用。

3

您提到的模式被称为“Singleton”,但是从您的代码示例中不清楚这是否真的是预期的。由于该成员是受保护的,所以我猜测不是 - 如果有子类,那么可能不会有单个实例。

1

这并不罕见;它可以是实现Singleton模式的一种好方法。还可以有其他用途 - 有时你会想要一小部分 - 而不是更多 - 给定班级的对象;那个班级是一个很好的地方。如果您不希望其他类能够创建此类的对象,则通常也会为该类提供一个私有构造函数。

这并不矛盾,因为编译器可以在完全编译该类之前知道对该类的引用。之后 - 如果你喜欢这样想 - 它可以“填补空白”。

4

这被称为Singleton设计模式。

你说的目的是为了确保只创建一个类的实例。

Wikipedia在模式上有一个preyty好文章。

1

它被称为Singleton。您确保创建一个给定类的一个(1)对象。

你应该添加一个私人的构造函数,所以创建该对象的唯一人就是该类。

public class SomeClass 
{ 
// Using private constructor 
protected static SomeClass myObject = new SomeClass(); 

private SomeClass(){ 
//... 
} 

public static SomeClass getObject() 
{ 
    return myOjbect 
} 
} 

远胜这里,在Wikipedia

你可能想看看以Factory Pattern

相关问题