您的位置:首页 > 编程语言 > Java开发

java单例的几种实现方法

2015-08-31 20:38 441 查看

java单例的几种实现方法:

方式1:

public class Something {
private Something() {}

private static class LazyHolder {
private static final Something INSTANCE = new Something();
}

public static Something getInstance() {
return LazyHolder.INSTANCE;
}
}

方式2:

public class Singleton {
private static final Singleton INSTANCE = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
return INSTANCE;
}
}

方式3:

public class Singleton {
private static final Singleton instance;

static {
try {
instance = new Singleton();
} catch (Exception e) {
throw new RuntimeException("Darn, an error occurred!", e);
}
}

public static Singleton getInstance() {
return instance;
}

private Singleton() {
// ...
}
}

方式4:

public enum Singleton {
INSTANCE;
public void execute (String arg) {
// Perform operation here
}
}

方式5:

public class SingletonDemo {
private static volatile SingletonDemo instance;
private SingletonDemo() { }

public static SingletonDemo getInstance() {
if (instance == null ) {
synchronized (SingletonDemo.class) {
if (instance == null) {
instance = new SingletonDemo();
}
}
}

return instance;
}
}

方式6:

使用apache commons lang: LazyInitializer

public class ComplexObjectInitializer extends LazyInitializer<ComplexObject> {
@Override
protected ComplexObject initialize() {
return new ComplexObject();
}
}

// Create an instance of the lazy initializer
ComplexObjectInitializer initializer = new ComplexObjectInitializer();
...
// When the object is actually needed:
ComplexObject cobj = initializer.get();

方式7:

使用guava:

private static final Supplier<String> tokenSup = Suppliers.memoize(new Supplier<String>() {
@Override
public String get() {
//do some init
String result = xxx;
return result;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: