public class FooClient {

    private Foo foo;
    private final static String key = "<api-key>";

    private static FooClient client = new FooClient();

    private FooClient() {
        foo = new Foo(key);
    }

    public static FooClient getFooClient() {
        return client;
    }
}



以上述方式初始化client是否可以。
我应该宣布私有Foo foo吗?作为静态的,我猜并非如此。
如果必须为不同的密钥支持不同的单例,则应该修改getFooClient(String key)来获取密钥并对其进行缓存,以便我可以返回特定于密钥的单例FooClients。

最佳答案

是。在构造函数中,您可以检查client != null是否存在-引发错误。 (这将抵消反射实例化)
不,这是单例的实例字段
是。并且您应该有一个Map<String, Foo>。但是请注意,这不是“不同的单例”-您的单例是“客户端”。其他类可以被实例化多次。

09-07 08:26