コンピュータービジョンアプリケーションを開発していますが、分類子クラスが必要になります。このクラスは、アプリケーションの実行ごとに不変であり、初期化時にディスクからトレーニング済みデータをロードします。プログラム全体が同じトレーニング済みデータにアクセスできるようにしたいので、ロードされたディスクからのリロードをブロックしたいと思います。
私が考えていたのは、静的クラスまたはシングルトンのいずれかを使用することでした。コンパイル時にデータファイルへのパスがわからないため、静的クラスにデータをロードする方法がわかりません。これはプログラム引数になります。そこでシングルトンパターンを考えていたのですが、動的に初期化する方法がわかりません。
私のアイデアは以下を使用することでした:
class Singleton {
private static Singleton instance;
private Singleton() { ... }
private static SomeDataObject data;
public static Singleton getInstance() {
if(instance == null)
instance = new Singleton();
return instance;
}
public static init(string dataPath){
if(data == null)
loadDataFromFile(dataPath)
}
}
どのメソッドが最初に呼び出されるかを制御できないため、これは機能しません。
最初にデータを使用してインスタンスを作成し、それを必要とするすべてのクラスとメソッドに渡すのが適切な方法であることはわかっていますが、それは実際には一般的な解決策ではありません。自分のコードでClassifierへのすべての呼び出しを追跡できますが、コードをAPIとして作成する場合、これは問題になります。
要するに、実行時にシングルトンを初期化する方法は?