您的位置:首页 > 编程语言

分享一个单例模型类Singleton代码

2014-02-24 19:12 267 查看
相关代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pixysoft.DesignPattern
{
public class Singleton<T>
{
private Dictionary<string, T> dict = new Dictionary<string, T>();

private string _id = null;

private static volatile object instance;

private static object syncRoot = new Object();

public static T Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
instance = Activator.CreateInstance(typeof(T));
}
}

return (T)instance;

}
}

public T this[string id]
{
get
{
//如果是null,表示自己,则直接返回Instance

if (string.IsNullOrEmpty(id))
return Instance;

id = id.Trim().ToUpper();

lock (syncRoot)
{
if (dict.ContainsKey(id))
return dict[id];

object i = Activator.CreateInstance(typeof(T));

((Singleton<T>)i)._id = id;

T it = (T)i;

dict.Add(id, it);

return it;
}
}
}

public T this[int index]
{
get
{
if (index < 0 || index > dict.Keys.Count - 1)
return Instance;

int coutner = 0;

foreach (string key in dict.Keys)
{
if (coutner >= index)
return dict[key];

coutner++;
}

return Instance;

}
}

public string SingletonId
{
get { return _id; }
}
}
}

使用方法:

class testclass
{
private void test()
{
Hello.Instance.Test();

Hello.Instance["id"].Test();
}
}

public class Hello : Singleton<Hello>
{

public void Test()
{
Console.Write("hello");
}
}看看有什么错误等,希望能够指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: