Java FAQ:インスタンス生成を制限する方法

Java FAQ:S010 Q-04

ほぼ、まんま

class C2008041501 {
    private static C2008041501 instance = new C2008041501();
    private C2008041501() { }

    public static C2008041501 getInstance() {
        return instance;
    }
}

public class C2008041500 {
    public static void main(String[] args) {
        C2008041501 c;

        c = C2008041501.getInstance();
        System.out.println(c);

        c = C2008041501.getInstance();
        System.out.println(c);
    }
}

で、

C2008041501@5ff48b
C2008041501@5ff48b
class C2008041511 {
    private static java.util.Dictionary table = new java.util.Hashtable();
    private String name;
    private C2008041511(String name) {
        this.name = name;
    }

    static C2008041511 getInstance(String name) {
        if (table.get(name) != null) {
            return (C2008041511)table.get(name);
        } else {
            C2008041511 foo = new C2008041511(name);
            table.put(name, foo);
            return foo;
        }
    }
}

public class C2008041510 {
    public static void main(String[] args) {
        C2008041511 c;

        c = C2008041511.getInstance("foo");
        System.out.println(c);

        c = C2008041511.getInstance("foo");
        System.out.println(c);

        c = C2008041511.getInstance("bar");
        System.out.println(c);
    }
}

で、

C2008041511@5ff48b
C2008041511@5ff48b
C2008041511@affc70