Singletonモード
9634 ワード
以下に、3つの実装方法を示し、それぞれメリットとデメリットを示す.
方法1:
長所:簡単明瞭欠点:資源を費やす
方法2:
利点:リソースの欠点を節約する:コードが冗長である
方法3:
利点:リソースを節約するだけでなく、欠点を簡単に明らかにします:スレッドは安全ではありませんか??
方法4:
利点:リソースを節約し、簡単明瞭で、スレッドも同期した(一矢三彫)欠点:軽く冗長
説明:前の3つの方法はスレッド同期していません(本当に同期する必要がありますか?)
http://www.cnblogs.com/k-sharp/archive/2010/05/26/1744121.html
方法1:
public
sealed
class
Singleton
{
private
static
readonly
Singleton instance
=
new
Singleton();
private
Singleton(){}
public
static
Singleton Instance
{
get
{
return
instance;
}
}
}
長所:簡単明瞭欠点:資源を費やす
方法2:
public
sealed
class
ClassicSingleton
{
private
static
ClassicSingleton instance;
private
static
object
syncRoot
=
new
Object();
private
ClassicSingleton() { }
public
static
ClassicSingleton Instance
{
get
{
if
(instance
==
null
)
{
lock
(syncRoot)
{
if
(instance
==
null
)
{
//
...custom code
instance
=
new
ClassicSingleton();
}
}
}
return
instance;
}
}
}
利点:リソースの欠点を節約する:コードが冗長である
方法3:
利点:リソースを節約するだけでなく、欠点を簡単に明らかにします:スレッドは安全ではありませんか??
方法4:
public
class
Singleton
{
private
static
Singleton instance;
//
Added a static mutex for synchronising use of instance.
private
static
System.Threading.Mutex mutex;
private
Singleton() { }
static
Singleton()
{
instance
=
new
Singleton();
mutex
=
new
System.Threading.Mutex();
}
public
static
Singleton Acquire()
{
mutex.WaitOne();
return
instance;
}
//
Each call to Acquire() requires a call to Release()
public
static
void
Release()
{
mutex.ReleaseMutex();
}
}
利点:リソースを節約し、簡単明瞭で、スレッドも同期した(一矢三彫)欠点:軽く冗長
説明:前の3つの方法はスレッド同期していません(本当に同期する必要がありますか?)
public
sealed
class
Singleton
{
static
Singleton(){Instance
=
new
Singleton();}
private
Singleton(){}
public
static
Singleton Instance{
get
;
private
set
;}
}
http://www.cnblogs.com/k-sharp/archive/2010/05/26/1744121.html