单例模式应该是在面试中问的最多的一种设计模式.

下面记录一下单例的几种实现方式:

1. 懒汉(线程不安全)

/**
 * 单例模式 - 懒汉(非线程安全)
 */
public class Singleton1 {
    private static Singleton1 singleton1;

    private Singleton1() {}

    public static Singleton1 getInstance() {
        if (singleton1 == null) {
            singleton1 = new Singleton1();
        }
        return singleton1;
    }
}

2. 懒汉(线程安全)

/**
 * 单例模式 - 懒汉(线程安全)
 */
public class Singleton2 {
    private static Singleton2 singleton2;

    private Singleton2() {}

    private static synchronized Singleton2 getInstance() {
        if (singleton2 == null) {
            singleton2 = new Singleton2();
        }
        return singleton2;
    }
}

3. 饿汉

/**
 * 饿汉模式
 */
public class Singleton3 {
    private static Singleton3 singleton3 = new Singleton3();

    private Singleton3() {}

    private static Singleton3 getInstatnce() {
        return singleton3;
    }
}

4. 双重校验锁

/**
 * 双重校验锁
 */
public class Singleton4 {
    private static volatile Singleton4 singleton4;

    public Singleton4() {}

    public static Singleton4 getInstatnce() {
        if (singleton4 == null) {
            synchronized (Singleton4.class) {
                if (singleton4 == null) {
                    singleton4 = new Singleton4();
                }
            }
        }
        return singleton4;
    }
}

 

posted on 2016-08-14 10:12  Manchester117  阅读(226)  评论(0)    收藏  举报