單例模式牵现,最簡單的模式
- 提供方便的全局訪問入口
- 提供一個簡單的對象管理
注意!Q!施籍!
- 容易導(dǎo)致代碼耦合嚴重
- 基本是不能用于多線程的程序的,需要加鎖
- 多組單例可以通過修改GetInstance()的代碼實現(xiàn)
《游戲編程模式》里把單例模式拎出來批判了一番概漱。
心中默默記下丑慎,盡量不要使用單例模式。
實際發(fā)現(xiàn)瓤摧,要是不用單例模式竿裂,好像都不會寫代碼了。
總不能想lua的源碼一樣照弥,每個函數(shù)都加個環(huán)境參數(shù)state吧腻异。
c#實現(xiàn)
namespace XUtils
{
public abstract class XBaseSingleton
{
public abstract bool Init();
public abstract void Uninit();
}
/// <summary>
/// 單例模版
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class XSingleton<T>: XBaseSingleton where T: new()
{
// add restriction
protected XSingleton()
{
if(_instance != null)
{
throw new Exception(_instance.ToString() + @" can not be created again.");
}
Init();
}
private static readonly T _instance = new T();
public static T singleton
{
get
{
return _instance;
}
}
public override bool Init() { return true; }
public override void Uninit() { }
}
}
// use
class TestSingleton:XSingleton<TestSingleton>
{
}
// 之后用 TestSingleton.singleton訪問就好了,十分方便