シングルトンにする必要があるクラスがあるので、これらの行に沿って何かを実装し始めました (正確なコードは覚えていませんが、これは wiki デモ実装です)
public class Singleton
{
private static Singleton instance = null;
private Singleton(){}
public static Singleton GetInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
最近のコードレビュー中に、上司はこれは不適切だと言い、次のクラスを提供してくれました。
public class Unique<T>
where T :class, new()
{
private static object _syncRoot = new Object();
private static volatile T _instance;
// private constructor
Unique() { }
// creates the new instance on the first call
public static T Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new T();
}
}
return _instance;
}
}
}
Unique<Singleton>.Instance
これで、任意のクラスの単一のインスタンスを取得するように記述します。その後、彼は戻って私のクラスを変更し、Singleton パターンを実装しないようにしました。問題は、このクラスが UI に表示するデータを維持するために不可欠であることです。彼はそれを知っています。しかし、今では誰もがやって来てvar x = new Singleton();
、UI を完全に台無しにする書き込みをすることができました。Singleton
のコンストラクターを public 以外にすることはできUnique
ません。
だから、私は彼のジェネリッククラスの力と柔軟性を理解しています。それはクールですべてですが、安全ではないようです. 何か不足していますか?
これはより広範な、言語に依存しない質問だと思いますが、投稿されたコードは C# であるため、言語なしでタグ付けされています。
編集; 実際、クラスの新しいインスタンスを作成した場合にどうなるかをテストしたところ、UI が損なわれませんでしたが、誰かが私からこのプロジェクトを継承していて、それを認識していない場合、なぜ彼らが'この特定のクラスに書き直すと、データが表示されません。