什么是单例模式?
就是自始至终只有一个实例,不管new多少次对象,他们都指向同一个引用。保证整个应用中某个实例有且只能有一个。
比如古代只能有一个皇帝。
一些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。
如果创作出多个实例,就会导致很多问题,比如占用过多资源,不一致的结果等。
单例模式的实现有两种方式:懒汉模式和饿汉模式
饿汉模式实现如下:
public class Singleton{
//创建私有构造函数,其他类中不能使用构造函数new一个对象
private Singleton()
{
}
//创建一个私有的对象
private static Singleton instance=new Singleton();
//其他类中只能通过这个public的getInstance()方法获得实例。
public static Singleton getInstance()
{
return instance;
}
}
懒汉模式实现如下:
public class Singleton{
//创建私有构造函数,其他类中不能使用构造函数new一个对象
private Singleton()
{
}
//声明一个私有的对象,但是不创建其实例对象
private static Singleton instance;
//其他类中只能通过这个public的getInstance()方法获得实例。
public static Singleton getInstance()
{
//如果没有对象的实例则创建。
if(instance==null)
{
instance = new Singleton();
}
return instance;
}
}
两者的区别:
饿汉模式:特点是加载类时比较慢,但是运行时获取对象的速度比较快,线程安全
懒汉模式:特点是加载类时比较快,但是运行时获取对象的速度比较慢,线程不安全