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

一、单例

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

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

    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;

    }

}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容