2018-12-04

单例模式 



目录 

-饿汉模式

-懒汉模式

- 双重检测

- 静态内部类

- 枚举实现

- 容器实现



饿汉模式 

代码

public class Singleton1 {

    //线程安全,因为类创建的时候就创建一个静态的对象

    private static Singleton1 instance=new Singleton1();//保证线程安全

    private Singleton1() {}

    public static Singleton1 getInstance() {

        if(instance==null) {

            instance=new Singleton1();

        }

        return instance;

    }

}


懒汉模式 

代码

public class Singleton2 {

    //线程不安全的原因,没有创建初始化对象

    private static Singleton2 instance;//线程不安全

    private Singleton2() {}

    //使其线程安全的方法

    public synchronized static Singleton2 getInstance() {

        if(instance==null) {

            instance=new Singleton2();

        }

        return instance;

    }

}


双重检测(DCL) 

代码

public class Singleton3 {

    private static Singleton3 instance;

    private Singleton3() {}

    public static Singleton3 getInstance() {

        if(instance==null) {

            synchronized(Singleton3.class) {//线程安全

                if(instance==null) {

                    instance=new Singleton3();

                }

            }

        }

        return instance;

    }

}


静态内部类 

代码

public class Singleton4 {

    private Singleton4() {}

    public Singleton4 getInstance() {

        return SingletonHolder.SINGLETON;

    }

    private static class SingletonHolder{

        private static final Singleton4 SINGLETON=new Singleton4();

    }

}


枚举实现 

代码

public class Singleton5 {

    public enum SingletonEnum{

        INSTANCE;

    }

}


容器实现 

代码

import java.util.*;

public class Singleton6 {

     public static Map<String,Object> objMap=new HashMap<String,Object>();

     private Singleton6() {}

    //输入

    public static void registerInstance(String key,Object instance) {

        if(!objMap.containsKey(key))

            objMap.put(key, instance);

    }

    //输出

    public static Object getInstance(String key) {

        return objMap.get(key);

    }

}

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 废话不多说,自己进入今天的主题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:...
    传奇内服号阅读 2,392评论 1 31
  • 1、身为中国第九大菜系的食堂派,出现任何你意想不到的黑暗料理你都不要大惊小怪,比如:冰镇麻辣烫、番茄炒菠萝,青椒炒...
    滕吠吠阅读 15,142评论 61 195
  • 《清明祭》 我站在父母的墓前, 点燃清明节的思念。 望着凄凉的野外, 父母孤独的守在, 这残风碎月的地方。 一年四...
    常乐人生阅读 343评论 0 5