单例静态方法变量

时间:2018-03-04 18:39:09

标签: java methods static singleton field

所以我试图通过在字段中使用私有构造函数和private static final new singleton类对象来创建单例对象。

但我很困惑这些方法是什么。所有方法都需要是静态的吗?所有字段都需要是静态的吗?

3 个答案:

答案 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;
  }

}

除非您出于某种原因需要一个对象实例,否则我无法想到功能上的差异。