单例模式

来源:互联网 发布:js 对象添加属性和值 编辑:程序博客网 时间:2024/06/05 19:11
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍四种:懒汉式单例、饿汉式单例、静态内部类、枚举。  单例模式有以下特点:  1、单例类只能有一个实例。  2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。一个合格的单例模式要满足三种条件,线程安全,懒加载(不用不创建),调用效率要高,推荐使用静态内部类和枚举方式(枚举没懒加载)。应用场景win的任务管理器,程序中的数据库链接,线程池。


/** * 单例模式饿汉式 * @author lilili *饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 */public class Test {private Test(){}//1 构造函数给私有了(这样正常情况下不能够new了,但是可以通过反射或反序列化去创建新的对象)     private static final Test t=new Test();//2 初始化先创建对象 属于类信息public static Test getTest(){return t;}}
/** * 单例模式懒汉式 * @author lilili * */public class Test01 {private Test01(){}//1 构造函数给私有了(这样正常情况下不能够new了)     private static  Test01 t;//2 声明public static synchronized  Test01 getTest(){//调用时候才new称为懒 线程不安全需要加synchronized if(t == null)t=new Test01();return t;}}

/** * 单例模式静态内部类 * @author lilili * */public class Test02 {private Test02(){}//1 构造函数给私有了(这样正常情况下不能够new了)    private static final class Test002{//静态内部类在加载时候创建天然线程安全    private static  Test02 t=new Test02();//2 声明    } public static  Test02 getTest(){//这种比上面懒汉 饿汉都好一些,既实现了线程安全,又避免了同步带来的性能影响开发中常用。return Test002.t;}}
/** * 单立模式枚举 * @author lilili *枚举模式本身就是单立模式,由虚拟机提供保障,避免了通过反射反序列化去创建新的对象 */public enum Test03 {INSTANCE;public void t(){}}
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍四种:懒汉式单例、饿汉式单例、静态内部类、枚举。  单例模式有以下特点:  1、单例类只能有一个实例。  2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。一个合格的单例模式要满足三种条件,线程安全,懒加载(不用不创建),调用效率要高,推荐使用静态内部类和枚举方式(枚举没懒加载)。应用场景win的任务管理器,程序中的数据库链接,线程池。




原创粉丝点击