建议你去看李建忠老师讲的设计模式视频,很有意义,其中讲到Singleton 单件(创建型模式)
主要是因为在软件系统中,有一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率,这时就要用到单件模式。
参考博文:.NET设计模式(2):单件模式(Singleton Pattern)
单件模式就是你希望在应用中唯一存在的模式,无论你在任何地方以任何方式获得的实体对象都是同一个目标对象。
比如,我们做Web开发的,在PAGE页面中,我们能直接使用Context对象,同时,我们也可以通过System.Web.HttpContext.Current来获得,这里,无论什么时候,都必须保证这个HttpContext的实体对象是相同的,便采用了单件模式来实现。
无论使用何种方式获得单件模式对象,为了确保单件模式的正确运行,都会通过单件实体对象的类型的构造函数来控制实现,因为这个方案是最简单有效的,如以下代码:
public class MySingltonEntity { private MySingletonEntity() { } private static MySingletonEntity _instance; public static MySigletonEntity Instance { get { return _instance ?? _instance = new MySingletonEntity(); } } }
当然,在具体实现的时候,也会有一些变通,比如,构造函数可以是internal的(在模块内保证唯一),也可以是public的(此时需要对构造函数检测单件对象是否已经构造,如果已经构造则抛出异常)。还可以通过一个Create方法来获得,如:
public class MySingltonEntity { private MySingletonEntity(object param) { } private static MySingletonEntity _instance; public static MySigletonEntity Create(object param) { return _instance ?? _instance = new MySingletonEntity(param); } }
也可以通过工厂的方式提供(当然,这个不是工厂模式)。
在进行EF或LINQ TO SQL的程序设计的时候,代码中,往往也需要对DbContext或ObjectContext或DataContext执行类似单件模式的操作(这里不是纯粹的单件模式),因为只有在同一个Context之下,对数据实体的操作才是可以互相关联的。
最煎蛋的例子
一个QQ号只能在一个地方登录
同时在其他地方登录时会挤掉另一个
你可以想像下如果两个地方QQ同时在线会带来的影响
许多应用程序一样会遇到这类问题
为了保证在多线程中修改同一数据不会冲突
简单地说就是把一些信息载页面一加载的时候放到缓存中,提高了取用效率