初尝Singlton 设计模式
最近那个项目的工作停滞了。我深切的感受到,基础知识不扎实带来的苦痛。反正在没有新的安排之前,我会继续自学。然后…不知道有什么然后。今天开始继续学习、复习设计模式。
設計模式(design pattern)這個術語是在1990年代,由Erich Gamma等人,從建築設計領域引入到計算機科學裡去的。是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。物件導向設計模式通常以類別或物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。設計模式主要是使不穩定的依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力。
动机
在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
意图
保证一个类仅有一个实例,并提供一个该实例的全局访问点。
代码
///
/// 利用.net 的内部机制,较为简洁的实现了Singlton
/// 优点:支持多线程
/// 缺点:初始化时,不能传参(相关参数可以通过其他方式调用,如属性)
///
class Singlton
{
private Singlton() { }
public static readonly Singlton Instance = new Singlton();
}
///
/// 实际上,同上述实现方式一致。
/// 在调用Instance 之前Singlton2 的静态函数就已经执行,并只执行一次。
///
class Singlton2
{
public static readonly Singlton2 Instance;
static Singlton2()
{
Instance = new Singlton2();
}
private Singlton2()
{ }
}
///
/// 最常见的Singlton 实现方式
///
class Singlton3
{
public static Singlton3 Instance;
private Singlton3() { }
public Singlton3 getInstance
{
get
{
if (Instance == null)
{
Instance = new Singlton3();
}
return Instance;
}
}
}
///
/// 用双重锁支持多线程的实现方式
///
class Singlton4
{
private static Singlton4 Instance;
private static object locker=new object();
private Singlton4() { }
public Singlton4 getInstance
{
get
{
if (Instance == null)
{
lock (locker)
{
if (Instance == null)
{
Instance = new Singlton4();
}
}
}
return Instance;
}
}
}
友情回帖
真,不知道说点什么好。