设计模式之单例模式

来源:互联网 发布:python 安装xpath 编辑:程序博客网 时间:2024/06/05 02:08

设计模式之单例模式

单例模式的用途
单例模式保证了系统中某个类只有一个实例,而且自行实例化并向整个系统提供自己。在计算机系统中,线程池、日志对象、缓存、对话框、打印机等都被设计成单例。spring默认也是单例模式,单例模式一方面可以控制实例产生的数量,提高垃圾回收的效率,另一方面也可以作为通信的媒介,使不同线程实现通信。
单例模式的写法:
关键是用private关键字修饰构造函数,使程序中不能通过new的方法创建对象。然后用懒汉模式或者饿汉模式来实现单例模式。

/** *  * @author admin * 懒汉模式,在第一次调用时创建实例 * 存在线程安全问题 */public class Singleton1 {    private Singleton1(){}    private static Singleton1 instance = null;    public static Singleton1 getInstance(){        if(instance == null){            instance = new Singleton1();        }        return instance;    }}
/** *  * @author admin * 懒汉模式,在第一次调用时创建实例 * 线程安全,性能不好 */public class Singleton2 {    private Singleton2(){}    private static Singleton2 instance = null;    public static Singleton2 getInstance(){        if(instance == null){            synchronized (Singleton2.class) {                if(instance == null){                    instance = new Singleton2();                }            }        }        return instance;    }}
/** *  * @author admin * 饿汉模式,在类加载时创建实例 * 线程安全,建议使用 */public class Singleton3 {    private Singleton3(){}    private static Singleton3 instance = new Singleton3();    public static Singleton3 getInstance(){        return instance;    }}
/** *  * @author admin * 静态内部类,在调用时创建实例 * 线程安全,建议使用 */public class Singleton4 {    private Singleton4(){}    private static class SingletonHolder{        private static Singleton4 instance = new Singleton4();    }    public static Singleton4 getInstance(){        return SingletonHolder.instance;    }}
0 0