单例模式

来源:互联网 发布:大麻在淘宝黑话 编辑:程序博客网 时间:2024/06/01 12:31
定义:
保证一个类,只有一个实例存在,同时提供可以对该类进行访问的全局方法。

作用:
一般用于:
1.全局变量来共享资源   
2.初始化全局socket等资源,这些资源往往只需要初始化一次
3.在大规模系统中,为了节省对象创建的时间,用此模式来减少对象的创建时间等。

实现方法:
1.构造函数私有化
2.提供一个全局的访问方法
3.在类中定义一个静态指针,指向本类的变量的静态变量指针。

//懒汉式   延时创建 效率更高,但需要考虑多线程初始化问题

class Single{    private static Single s = null;    private Single(){}    public static Single getInstance()    {        if(s==null)//这儿使用double-check是为了提升效率,同时防止多次创建内存,如果多个线程调用这个函数,则可能每个线程都进入这个判断里面。        {            lock();    if(s==null)//这儿使用临界区是为了保证单例,防止多次创建, 这次的check是为了判断如果内存已经创建,则直接退出临界区    {m_singer = new Single();    }    unLock();        }        return s;    }}


//饿汉式单例 优点:没有加锁,执行效率会提高,但是浪费内存,加载时就创建实例。
public class Singleton {      private static final Singleton SINGLETON = new Singleton();//在定义的时候就先申请内存      private Singleton() {}       public static synchronized Singleton getInstance() {      return SINGLETON;}}


0 0
原创粉丝点击