Я не уверен, что вы ищете, поэтому я напишу что-нибудь и посмотрю, что вы скажете.
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private double weight; // in pounds
private Elvis() { weight = 300.; } // inaccessible
public static Elvis getInstance() { return INSTANCE; }
public double getWeight() { return weight; }
public void setWeight(double weight) { this.weight = weight; }
}
Поскольку есть только один Элвис, вы могли бы сделать weight
статическая переменная (со статическим геттером и сеттером).Если вы сделаете все переменные статическими, то нет смысла определять одиночный INSTANCE, поскольку у вас просто есть класс, содержащий только статические переменные и методы:
public class Elvis {
private static double weight; // in pounds
static { weight = 300.; } // Could just have set the weight directly above,
// but a static block might be useful for more complex examples.
public static double getWeight() { return weight; }
public static void setWeight(double weight) { this.weight = weight; }
}
Полагаю, этого следует избегать, так как он больше похож нафайл заголовка на C, чем OO.
Некоторые, возможно, распознали ссылку Элвиса из J. Bloch "Effective Java".Рекомендация в этой книге состоит в том, чтобы реализовать шаблон синглтона с перечислением с одним членом:
public enum Elvis {
INSTANCE;
private double weight = 300.;
public double getWeight() { return weight; }
public void setWeight(double weight) { this.weight = weigth; }
}
Обратите внимание, что здесь выглядит несколько нестандартно с переменным весом, поскольку вы обычно ожидаете, что экземпляры перечисления будут неизменными.