当你有很多课程时,通常需要从另一个课程中访问一个课程的字段/方法。我对Java不是很有经验,我最近发现这个方法看起来非常方便(比将变量从一个类传递到另一个类更好):
class MyClass {
private static MyClass _instance = null;
public MyClass(){
...
}
public static getInstance(){
if (_instance == null) {
_instance = new MyClass();
}
return _instance;
}
}
现在在任何其他课程中我都可以做到
MyClass.getInstance().callSomething()
但是我没有看到在Internet上找到的Java示例和教程中访问其他类的方法。这让我思考,这种方法可能存在一些潜在的问题吗?特别是当你有很多类,因此每个都有很多这样的静态调用?
答案 0 :(得分:2)
MyClass.getInstance()。callSomething()
但是我没有看到用Java访问其他类的方法 我在互联网上找到的示例和教程。
您指定的方法是最常用的名为Singleton模式的设计模式之一。
在Java中,Singleton模式将确保在Java虚拟机中只创建一个类的实例。它用于提供对象的全局访问点。在实际使用方面,Singleton模式用于日志记录,高速缓存,线程池,配置设置,设备驱动程序对象。设计模式通常与工厂设计模式结合使用。
但是,您的代码似乎不符合Singleton Design模式的合同。它主要要求您的类只有私有构造函数(以避免其他类实例化它)。
public MyClass(){ // Constructor needs to be private
...
}
getInstance()
方法似乎也没有效果。
试试这个:
public static MyClass getInstance(){
建议使用 Enum 在Java 5或更高版本中实现Singleton。 Enum是线程安全的,通过Enum实现Singleton可确保您的单例即使在多线程环境中也只有一个实例
请点击此链接详细了解Singleton pattern using Enum
这是一个很好的链接,可以帮助您understand Singleton pattern in detail.
答案 1 :(得分:0)
这种设计模式叫做Singleton,看看下面的问题。