C#设计模式之单件模式.ppt

C#设计模式之单件模式.ppt

ID:49499523

大小:255.50 KB

页数:21页

时间:2020-02-06

C#设计模式之单件模式.ppt_第1页
C#设计模式之单件模式.ppt_第2页
C#设计模式之单件模式.ppt_第3页
C#设计模式之单件模式.ppt_第4页
C#设计模式之单件模式.ppt_第5页
资源描述:

《C#设计模式之单件模式.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单件模式模式模式是一个非常有趣的话题,它是对特定前提下重复出现问题的一个普遍解答,它是一种思想,使用得当也会对设计、实施提供帮助。简单的说,软件开发发展了几十年,前人遇到了很多很多的问题,有些人做了归纳总结,把某一类问题总结出一个解决套路,这些套路可以有效的解决类似的问题。形成了我们的23种模式。概述Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。五种实现简单实现1publicsealed class Singleton  2{  3    static Singleton instanc

2、e=null;  4  5    Singleton()  6    {  7    }  8  9    public static Singleton Instance 10    { 11        get 12        { 13            if (instance==null) 14            { 15                instance = new Singleton(); 16            } 17            return instance

3、; 18        } 19    } 20}简单实现简单实现很容易理解,只有在实例为空的情况下才创建新的实例。但若处在多线程情况下,会出现问题:1)线程一执行完if (instance==null)这句后,准备进入下一句创建实例时,被挂起;2)此时切换到线程二,线程二全部执行完毕后,实例已经创建完毕。3)线程一激活,继续创建实例,造成双实例情况。违背单间原则。安全的线程1publicsealed class Singleton  2{  3    static Singleton instance=null;  

4、4    static readonly object padlock = new object();  5  6    Singleton()  7    {  8    }  9 10    public static Singleton Instance 11    { 12        get 13        { 14            lock (padlock) 15            { 16                if (instance==null) 17            

5、    { 18                    instance = new Singleton(); 19                } 20                return instance; 21            } 22        } 23    } 24}安全的线程此设计更正了简单实现出现的情况,其不会出现双线程时创建多个实例。但是,进入Instance的Get方法后,直接被锁住,直到return结束后,才会允许其他线程进入。此处大大的降低了效率,因为其不管Instance是

6、否为空,都加锁,有点不合适。双重锁定1publicsealed class Singleton  2{  3    static Singleton instance=null;  4    static readonly object padlock = new object();  5  6    Singleton()  7    {  8    }  9 10    public static Singleton Instance 11    { 12        get 13        { 14    

7、        if (instance==null) 15            { 16                lock (padlock) 17                { 18                    if (instance==null) 19                    { 20                        instance = new Singleton(); 21                    } 22                } 2

8、3            } 24            return instance; 25        } 26    } 27}双重锁定双重锁定改善了安全的线程出现的性能降低的问题。如若Instance不为空,则不需要进入锁,提高了效率。有人会问为什么锁外面判断一次实例是否为空,锁里面还有一次判断?主要是考虑多线程,一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。