单例模式(Singleton)又叫单态模式,它出现目的是为了保证一个类在系统中只有一个实例,并提供一个访问它的全局访问点。从这点可以看出,单例模式的出现是为了可以保证系统中一个类只有一个实例而且该实例又易于外界访问,从而方便对实例个数的控制并节约系统资源而出现的解决方案。
懒汉模式
优点:只有调用getInstance()的时候才会被创建,能够节省资源
缺点:如果多个线程进行访问就会出现线程安全问题,一般都会用synchronized加锁
package com.ken; /** * 懒汉式 * @author Administrator * */ public class Singleton2 { private Singleton2() { } private static Singleton2 instance = null; public static Singleton2 getInstance() { if (instance == null) { instance = new Singleton2(); } return instance; } }
饿汉模式
优点:执行效率高
缺点:没有调用getInstance方法就被创建,会浪费资源
package com.ken; /** * 饿汉式 * @author Administrator * */ public class Singleton1 { private Singleton1() { } private static Singleton1 instanceSingleton1 = new Singleton1(); public static Singleton1 getinstance() { return instanceSingleton1; } }
应用场景
日志,线程池,数据库连接池,网络计数器等
特点:
1、需要频繁实例化然后销毁的对象。
2、创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
3、有状态的工具类对象。
4、频繁访问数据库或文件的对象。