单例模式
什么是单例模式?
单例模式顾名思义就是整个类中有且仅有一个的实例对象。
单例模式的三个要点:
- 有且仅有一个私有实例
- 构造方法是私有的,以保证不会被多次创建
- 提供一个访问单例对象的公有静态方法
单例模式分很多种,常见的有饿汉模式、懒汉模式、静态内部类单例模式和双重锁模式…
饿汉模式
饿汉模式,这个比喻可以理解成人饥饿的时候立马就想要吃东西,放到代码里,可以说想要获取一个对象的时候立马就可以得到。饿汉模式中的Singleton对象作为静态成员变量,它在类加载时就已经初始化了,所以想要使用此对象的时候可以立即获取。
代码示例:
public class Singleton{
//1.静态成员:有且仅有一个实例
private static Singleton singleton = new Singleton();
//2.私有的构造方法
private Singleton(){
};
//3.获取单例对象的静态方法
public static Singleton getInstance(){
return singleton;
}
}
饿汉模式的特点:
- 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如网站首页页面缓存)。
- 避免对资源的多重占用(比如写文件操作)。
- 线程安全。
- 可能造成资源的浪费,类初始化的时候已经创建单例对象实例了,但是它可能不会被使用到。(使用静态内部类单例模式或懒汉式可以解决)
静态内部类单例模式
对饿汉模式进行改进,由于饿汉模式的单例对象初始化不能延迟到它真正被使用的时候,那就想个办法来延迟初始化,静态内部类就可以做到这一点。
代码示例:
public class Singleton{
//静态内部类
public static class Inner