Объект может быть одноэлементным, но он может быть частью более крупной структуры, которая не совсем знает, что это.Например, он может реализовать интерфейс, который может иметь несколько различных реализаций (и, следовательно, экземпляров):
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);
Если вы хотите сериализовать, а затем десериализовать этоdumper, в вашей программе будет два StdoutStringSink
экземпляра.