单例模式
2017-06-29 本文已影响0人
小小青蛙不怕风吹雨打
单例模式,最简单的模式
- 提供方便的全局访问入口
- 提供一个简单的对象管理
注意!!!
- 容易导致代码耦合严重
- 基本是不能用于多线程的程序的,需要加锁
- 多组单例可以通过修改GetInstance()的代码实现
《游戏编程模式》里把单例模式拎出来批判了一番。
心中默默记下,尽量不要使用单例模式。
实际发现,要是不用单例模式,好像都不会写代码了。
总不能想lua的源码一样,每个函数都加个环境参数state吧。
c#实现
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访问就好了,十分方便