设计模式(二)-创建型模式-单例

一、单例

        单例指的是整个业务中只有一个实例,这样做能节省内存空间,不用重复创建,使用方便。

        单例分为懒汉和饿汉模式,两种模式的代码写法均推荐写法二。

    1.懒汉模式

        懒汉代码写法一,如下:

public class LazySingleTon {

    private static volatile LazySingleTon instance = null;

    private LazySingleTon() {};

    public static synchronized LazySingleTon sharedInstance() {

        if (instance == null) {

            instance = new LazySingleTon();

        }

        return instance;

    }

}

        这种写法因为每回调用调用sharedInstance都需要同步线程,所以多线程大批量操作时会影响效率,所以我们推荐写法2,只有首次为null的时候才锁定线程,之后不为null时,不锁定线程,直接返回instance

public class LazySingleTon {

    private static volatile LazySingleTon instance = null;

    private LazySingleTon() {};

    public static LazySingleTon shareInstance() {

        if (instance == null) {

            synchronized (LazySingleTon.class) {

                if (instance == null) {

                    instance = new LazySingleTon();

                }

            }

        }

        return instance;

    }

}

    2.饿汉模式

        饿汉代码写法一,如下:

public class HungrySingleTon {

    private static final HungrySingleTon instance = new HungrySingleTon();

    private HungrySingleTon(){};

    public static HungrySingleTon sharedInstance() {

        return instance;

    }

}

        这种写法,因为采用静态常量的写法,在项目运行初期是一定会new个对象,占用了空间,可以采用内部类的静态常量的写法,这样可以在调用的时候才new个对象,可以节省内存空间。写法二如下:

public class HungrySingleTon {

    private static class HungrySingleTonHolder {

        private static final HungrySingleTon instance = new HungrySingleTon();

    }

    private HungrySingleTon(){};

    public static HungrySingleTon sharedInstance() {

        return HungrySingleTonHolder.instance;

    }

}

        以上所有代码均建议采用写法二,可以节省内存空间或减少内存支出~

你可能感兴趣的:(设计模式(二)-创建型模式-单例)