android 程序员认知-单例模式

class Single 
{
    private static  Single s=new Single();
    private Single(){}
    public static Single getInstance()
    {
        return s;
    }
}

为什么方法是静态的:不能new对象却想调用类中方法,方法必然是静态的,静态方法只能调用静态成员,所以对象也是静态的。

为什么对象的访问修饰符是private,不能是public 吗?不能,如果访问修饰符是Public,则Single.s也可以得到该类对象,这样就造成了不可控。

class Single 
{
    private static Single s=null;
    private Single(){}
    public static Single getInstance()
    {
        if(s==null)
            s=new Single();
        return s;
    }
}

最优实现。多一个

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

第一次判空操作,目的是提高效率;synchronized是同步代码块的入口,目的是保证线程安全;第二次判空操作是为了保证单例对象的唯一性

发布了46 篇原创文章 · 获赞 21 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012922981/article/details/93161673
今日推荐