您的位置:首页 > 其它

单例模式

2015-07-02 14:24 232 查看

问题引入:

我希望工具箱要么不出现,出现也只出现一个,可实际上却是每次点击菜单,实例化‘工具箱’,他就会出来一个,这样点击多次就会出现很多个‘工具箱’该怎么办?


单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

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









单例模式的好处:


单例模式因为Singleton类封装他的唯一实例,这样它可以严格地控制客户怎样访问它已经何时访问它。简单地说就是对唯一实例的受控访问。



二、多线程时的单例


lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。





这是因为加锁时,instance实例有没有被创建过实例还不知道,怎么对它加锁呢?

缺点:

每次调用GetInstance方法时都需要lock,这样会影响性能,所以需要改良。方法如下:



为什么两次判断instance实例是否创建?如图:

public static Singleton GetInstance()

{



单例模式试图解决的两个基本问题:全局访问和实例化控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: