Синглтоны подходят для этого сценария, НО вы должны убедиться, что вы делаете синглтон правильно.
Так, например, то, что предлагает Божно, - это не синглтон, это отвратительная смесь мерзкой статики, которая не является насмешливой, не легко проверяемой, не вводимой и обычно возвращается к вам в задницу.
Приемлемый синглтон - это просто ваш средний класс, за одним заметным исключением, что он гарантирован либо сам по себе, либо какой-либо внешней фабрикой / каркасом (например, Spring IoC) существовать только в одном экземпляре. Если вы идете с первым подходом, вы делаете что-то вроде
private MyUberSingletonClass() {
//..do your constructor stuff, note it's private
}
private static MyUberSingletonClass instance = null;
public static synchronized MyUberSingletonClass instance() {
if (instance == null) {
instance = new MyUberSingletonClass();
}
return instance;
}
public String getUberUsefulStuff(){
return "42";
}
Это приемлемо, если вы по-другому не чувствуете необходимость в фабрике и не используете какой-либо контейнер IoC в своем приложении (хотя стоит подумать об этом). Обратите внимание на отличие от примера Божно: это хороший класс vanilla, в котором единственным static является экземпляр var и метод для его возврата. Также обратите внимание на синхронизированное ключевое слово, необходимое для отложенной инициализации.
обновление: Паскаль рекомендует этот очень крутой пост о лучшем способе синглов с ленивым инициированием в комментариях ниже: http://crazybob.org/2007/01/lazy-loading-singletons.html