所以我试图通过在字段中使用私有构造函数和private static final new singleton类对象来创建单例对象。
但我很困惑这些方法是什么。所有方法都需要是静态的吗?所有字段都需要是静态的吗?
答案 0 :(得分:3)
单例的(单个)实例已经是静态的,因此单例类的字段和方法都不需要是静态的。
答案 1 :(得分:1)
让static
成员操纵你的单例是没有意义的,因为单例模式被设计用于创建和返回类的单个实例。
假设此代码:
MySingleton.getInstance().foo();
如果foo()
是static
,为什么在调用foo()之前调用getInstance()
?
实例无法调用静态方法
所以这就够了:
MySingleton.foo();
但是在这种情况下,这意味着单例实例不需要返回,但只能由类本身在引擎盖下操作。 单例模式的目的不是确保一个类只有一个实例 d提供全局访问点
答案 2 :(得分:0)
从技术上讲,你有两种方法可以创建一个singelton。
创建一个没有可用构造函数的完全静态类
public final class StaticSingelton{
private final static String readOnlyField = "readMe";
private int static writeOnlyField = -1;
private double static readAndWriteField = -1;
private StaticSingelton(){
throw new IllegalAccessException();
}
public final static String getReadOnlyField(){
return readOnlyField;
}
public final static void setWriteOnlyField(final int value){
writeOnlyField = value;
}
public final static double getReadAndWriteField(){
return readAndWriteField;
}
public final static void setReadAndWriteField(final double value){
readAndWriteField = value;
}
}
创建一个只能存在一个实例且允许访问它的类 公共决赛班InstanceSingelton {
private final static InstanceSingelton instance = new InstanceSingelton();
private final String readOnlyField = "readMe";
private int writeOnlyField = -1;
private double readAndWriteField = -1;
private InstanceSingelton(){
if(instance != null){
throw new IllegalAccessException();
}
}
public final static InstanceSingelton getInstance(){
return instance;
}
public final String getReadOnlyField(){
return readOnlyField;
}
public final void setWriteOnlyField(final int value){
writeOnlyField = value;
}
public final double getReadAndWriteField(){
return readAndWriteField;
}
public final void setReadAndWriteField(final double value){
readAndWriteField = value;
}
}
除非您出于某种原因需要一个对象实例,否则我无法想到功能上的差异。