单例模式

单例模式要点:

1:构造函数私多余的对象

2:只能拥有一个对象

饿汉式(最简单的一种写法,类加载直接new出一个对象)

class Singleton{

    private static final Singleton singleton = new Singleton();

    public static Singleton getInstance(){

        return singleton;

    }

}

懒汉式

1.线程不安全写法,多线程可能会同时new对象

class Singleton{

    private Singleton(){};

    private static final Singleton singleton = null;

    public static Singleton getInstance(){

    if(singleton == null){

        singleton = new Singleton();

    }

        return singleton;

    }

}

2.线程安全写法,但效率太低,一般不用 加synchronized

class Singleton{

    private Singleton(){};

    private static final Singleton singleton = null;

    public static synchronized Singleton getInstance(){

    if(singleton == null){

        singleton = new Singleton();

    }

        return singleton;

    }

}

3.双重校验锁,较常用,解决线程问题和效率问题

class Singleton{

    private Singleton(){};

    private static final Singleton singleton = null;

    public static Singleton getInstance(){

        if(singleton == null){

            synchronized (Singleton.class){

                if(singleton == null){

                    singleton = new Singleton();

                }

            }

        }

        return singleton;

    }

}

4.静态内部类

class Singleton{

    private Singleton(){};

    private static class InstanceHolder(){

        private static final Singleton SINGLETON= new Singleton();(定义常量都大写)

    }

    public static Singleton getInstance(){

        return InstanceHolder.SINGLETON;

    }

}

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