码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式一(单例模式)

时间:2016-05-20 23:58:17      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

单例模式:所谓单例模式就是确保类只有一个对象,并提供一个公共的访问接口。下面根据概念分析单例模式。

1、确保一个实例,就是不让程序随处可以new一个对象,这个怎么实现呢?运用私有构造函数。

public class Singleton
{
    private Singleton()
    {

    }  
}

这样Singleton就不能new对象了。

2、唯一的对象在何处?在内部定义一个静态的Singleton对象,为什么要定义静态的呢,因为静态对象属于类。然后提供一个公共的访问接口即可

public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    
    public static Singleton GetInstance()
    {
        if(singleton==null)
        {
            singleton=new Singletion();
        }
        
        return singleton;
    }
}
单例模式就算完成了,但是这里存在个问题,对于多线程,可能同时存在几个线程同时走到if(singleton==null)这儿,这样就会new出多个singleton实例,这也不能保证其唯一。对于这种多线程的情况,我们可以加进程锁机制,确保在判断这儿只会有一个线程访问,改进如下:
public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    //线程锁
    private static readonly object lockObj=new object();

    public static Singleton GetInstance()
    {
        //双重判断是为了提高性能
        if(singleton==null)
        {
            lock(lockObj)
            {
                if(singletion==null)
                {
                    singleton=new Singletion();
                }
            }
        }
        
        return singleton;
    }
}

 

 


 

设计模式一(单例模式)

标签:

原文地址:http://www.cnblogs.com/session0827/p/5513736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!