[设计模式]之单例模式

单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 通常我们可以让一个全局变量使得一个对象被访问,但是不能防止你实例化多个对象,一个最好的办法就是:让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法


单例模式除了可以保证唯一实例外,还可以:
单例模式一位Singleton类封装它的唯一实例,还可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。

多线程时的单例

在多线程程序中,多个线程同时,注意要是同时访问Singleton类,调用GetInstance方法,会可能造成创建多个实例

这里就需要把临界区的代码给锁起来,保证只有一个线程在临界区之中,如果其他线程试图进入锁定代码,则它将一直等待,直到该对象被释放


 双重锁定

为了不让线程每次都加锁,而只在实力未创建的时候在加锁处理

静态初始化

C#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显示的编写线程安全代码,既可以解决多线程下它是不安全的问题。

总结:静态初始化的方式是在自己被加载时就将自己实例化了,所以被形象的称之为饿汉单例模式
       原先的模式是要在第一次被引用时,才会讲自己实例化,所以被形象的称之为懒汉单例模式
饿汉单例模式:一加载就实例化对象,所以要提前占用系统资源。以空间换取时间
懒汉单例模式:面临着多线程访问的安全性问题,需要做双重锁定这样的处理才可以保证安全,以时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间从C#语言来讲,饿汉单例模式已经足够满足我们的需求了。



posted @ 2012-07-05 14:32  hailiang2013  阅读(123)  评论(0编辑  收藏  举报