当用户更新数据库时,是否有办法强制单例实例重置?
public class Example{
private Dictionary<int, string> _list;
private Example(){
_list = new Dictionary<int, string>();
//Get data from database here and add the data to _list
}
private class Nested{
static Nested(){}
internal static readonly Example Instance = new Example();
}
public static Dictionary<int, string> GetExample(){
return Nested.Instance._list
}
}
那么,我是否在更新数据库时重置_list?
谢谢!
答案 0 :(得分:7)
简短的回答是:否。
最接近的是重置词典:
public void Reset(){ _list.Clear(); }
现在答案很长......
你为什么要使用单身人士?我认为这是因为你阅读了GoF设计模式书并认为它看起来像一个有趣的想法。单例模式打破了面向对象设计的每一个原则。你不能从它们继承,破坏封装,也不存在多态性。
在你发布的例子中,你将你的班级(字典)的内部工作交给任何想要它的人。如果他们改变了怎么办?如何使用线程?
如果你只想在你的应用程序中使用一个类的实例,那么只调用new一次,或者使用具有单例生活方式的依赖注入容器,但这是另一个主题。
呃,我讨厌单身人士。
答案 1 :(得分:0)
一种方法是使用延迟加载并提供“无效”或“重置”方法。
public class Example
{
private static Dictionary<int, string> _list;
public static void Invalidate()
{
_list = null;
}
public static Dictionary<int, string> GetExample()
{
if (_list == null)
_list = new Dictionary<int, string>();
return _list;
}
}
有一点需要注意的是,根本没有设置多线程。不建议将Dictionary类用于重入代码,并且需要在GetExample和Invalidate方法中实现某种锁定。