import java.util.ArrayList;
import java.util.List;
class Singleton {
private final static int N = 3;
private static int counter = 0;
private static List<Singleton> instances = new ArrayList<Singleton>();
private int id;
private Singleton (int id) {
this.id = id;
}
public static Singleton getInstance () {
int instanceId = counter % N;
if (instances.size() < instanceId + 1) {
instances.add(new Singleton(instanceId));
}
counter++;
return instances.get(instanceId);
}
return "Singleton(" + id + ")";
}
}
class SingletonTest {
public static void main
(String[] args
) { System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); System.
out.
println(Singleton.
getInstance()); }
}
CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgpjbGFzcyBTaW5nbGV0b24gewoKCiAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTiA9IDM7CiAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7CiAgICBwcml2YXRlIHN0YXRpYyBMaXN0PFNpbmdsZXRvbj4gaW5zdGFuY2VzID0gbmV3IEFycmF5TGlzdDxTaW5nbGV0b24+KCk7CiAgICBwcml2YXRlIGludCBpZDsKCiAgICBwcml2YXRlIFNpbmdsZXRvbiAoaW50IGlkKSB7CiAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU2luZ2xldG9uIGdldEluc3RhbmNlICgpIHsKICAgICAgICBpbnQgaW5zdGFuY2VJZCA9IGNvdW50ZXIgJSBOOwogICAgICAgIGlmIChpbnN0YW5jZXMuc2l6ZSgpIDwgaW5zdGFuY2VJZCArIDEpIHsKICAgICAgICAgICAgaW5zdGFuY2VzLmFkZChuZXcgU2luZ2xldG9uKGluc3RhbmNlSWQpKTsKICAgICAgICB9CiAgICAgICAgY291bnRlcisrOwogICAgICAgIHJldHVybiBpbnN0YW5jZXMuZ2V0KGluc3RhbmNlSWQpOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCkgewogICAgICAgIHJldHVybiAiU2luZ2xldG9uKCIgKyBpZCArICIpIjsKICAgIH0KCn0KCgpjbGFzcyBTaW5nbGV0b25UZXN0IHsKCgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU2luZ2xldG9uLmdldEluc3RhbmNlKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihTaW5nbGV0b24uZ2V0SW5zdGFuY2UoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFNpbmdsZXRvbi5nZXRJbnN0YW5jZSgpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU2luZ2xldG9uLmdldEluc3RhbmNlKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihTaW5nbGV0b24uZ2V0SW5zdGFuY2UoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFNpbmdsZXRvbi5nZXRJbnN0YW5jZSgpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU2luZ2xldG9uLmdldEluc3RhbmNlKCkpOwogICAgfQoKfQoKCgo=