三种单例模式的实现与性能分析

题目:单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。

你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。

思路:

1.饿汉式(在类加载的时候就创建对象,但是性能优越)

class Solution {

    private static Solution solution = new Solution();  //饿汉式
     
    public static Solution getInstance() {
        return solution;
    }
};

此时注意solution对象必须是static且private的。

运行时间:187ms

2.懒汉式(在第一次使用时创建对象,用到了synchronized关键字)

class Solution {
    private static Solution solution = null; 

    public static synchronized Solution getInstance(){
        if(solution == null){
            solution = new Solution();        //懒汉式
        }
        return solution;
    }
};

运行时间:453ms

3.结合了以上方法两种方法的优点,运用了内部类和类的初始化方式

class Solution {

    // 结合两者优势的一种单例
    private static class SingletonHolder{
        private static Solution solution= new Solution();
    } 
    
    public static Solution getInstance(){
        return SingletonHolder.solution;
    }
};
运行时间:151ms

你可能感兴趣的:(LeetCode)