interface
方法が1つしかないものを考えてみましょう。
Object getValue(String data);
String
これがaから他のデータ型へのデータ変換を説明していると仮定します(変換が有効であると仮定します)。テキストコンテキストからのデータの場合、同じデータ型の列が複数ある可能性があるため、同じデータトランスフォーマーの複数のインスタンスが存在します。
ずっと前に、同じオブジェクトの複数のインスタンスを持つ代わりに、これらのインスタンスをキャッシュするコードを記述していました。
private HashMap<Class<? extends T>, T> map;
public synchronized T getInstance(Class<? extends T> type) throws IllegalArgumentException
{
T instance = map.get(type);
if (instance == null)
{
try
{
instance = type.newInstance();
}
catch (Exception ex)
{
throw new IllegalArgumentException("The provided class cannot be instantiated: "
+ type.getName() + "\n" + ex);
}
map.put(type, instance);
}
return instance;
}
これらのクラスには状態がないため、単一の共有インスタンスが行う場合に同じクラスのインスタンスを多数持つことは、当時は無駄に思えました。
ただし、同じオブジェクトの複数のインスタンスを持つよりも、マッピングを維持する方がオーバーヘッドが高くなる可能性があります(単一のインスタンスを共有できる場合でも)。つまり、複数のインスタンスがありますが、メソッドコードは一度だけメモリに配置されますよね?したがって、私の考えでは、JVMは効果的にキャッシュを保持しています。
その件について何か考えはありますか?シングルトンインスタンスキャッシュアプローチの方が優れているでしょうか?
私の投稿を読んでいただきありがとうございます。