前言
- 定义:确保某一个类只有一个实例,这个类称为单例类,它提供全局访问的方法。
- 实现:私有静态成员变量,存放实例;私有构造方法,防止new实例;公共静态方法,创建或返回私有静态成员变量存放的实例
- 懒汉模式:工厂方法时实例对象,运行时实例
- 饿汉模式:私有静态成员变量直接赋值,编译直接实例对象
单例模式是一种对象创建型模式。
- 优点
减少内存和性能的开销
共享资源 - 缺点
需要额外的处理线程安全
要考虑单例会GC的问题
饿汉式单例模式
public class Singleton{
//私有方法
private static Singleton instance=new Singleton();
//私有方法
private Singleton(){}
//共有方法调用
pulic static Singleton getInstance(){
return instance;
}
}
特点:饿汉式会提前进行实例化,没有延迟加载,不管是否使用都会有一个已经初始化的实例在内存中,单会出现懒汉式中的多线程问题。
懒汉式单例模式
public class Singleton{
private static Singleton instance;
private Singleton(){} //私有化构造
//如果没有创建创建一个实例
public static Singleton getInstance(){
if(instance==null)
return instance=new Singleton();
else
return instance;
}
}
特点:实现了延迟加载,但在多线程情况下可能会出现问题,不能保证线程安全。
线程安全的懒汉式单例模式
public class Singleton{
private static Singleton instance;
private Singleton(){}
public static sychronized Singleton getInstance(){
if(instance==null)
return instance=new Singleton();
else
return instance;
}
}
加了线程锁