Объект может быть одноэлементным, но он может быть частью более крупной структуры, которая не совсем знает. Например, он может реализовать интерфейс, который может иметь несколько различных реализаций (и, таким образом, экземпляры):
interface StringSink extends Serializable { void dump(String s); }
class MultiDumper implements Serializable {
private final StringSink sink;
public MultiDumper(StringSink sink){ this.sink = sink; }
void doSomeStuff(Collection<String> strings){
for (String s : strings) sink.dump(s);
}
}
Теперь предположим, что мы хотим StringSink
, который сбрасывает строки на стандартный вывод. Поскольку существует только один стандартный вывод, мы могли бы также сделать его одноплодной:
/** Beware: Not good for serializing! */
class StdoutStringSink {
public static final StdoutStringSink INSTANCE = new StdoutStringSink();
private StdoutStringSink(){}
@Override
public void dump(String s){ System.out.println(s); }
}
И мы используем это следующим образом:
MultiDumper dumper = new MultiDumper(StdoutStringSink.INSTANCE);
Если вы сериализации, а затем десериализации этот самосвал, вы» d имеют два экземпляра StdoutStringSink
, плавающих в вашей программе.
Спасибо за ответ, но мой вопрос больше о * why * для сериализации Singleton, чем о том, как это сделать. Изменит вопрос, чтобы отразить это. – shrini1000
Для gwt, jpa, hibernate например :) и других фреймворков, которые отправляют его по сети. –
Конкретный пример/ссылка на один поможет. :) – shrini1000