1、单例模式
单例模式(Singleton Pattern)是一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只创建单个对象。该类提供了一种访问其唯一的对象的方式,可以直接访问,无需实例化该类的对象。
1.1 单例模式的角色
单例模式有两种角色:单例类和访问类
(1) 单例类:只能穿件一个实例的类。
(1) 访问类:使用单例类。
1.2 单例模式的实现
单例模式的实现分为两种种:饿汉式和懒汉式
(1) 饿汉式:类加载就会导致该实例对象被创建。
(1) 懒汉式:类加载不会导致该实例对象被创建,而是首次使用该对象的时候,该对象才会被创建。
1.2.1 方式1——饿汉式(静态变量方式)
1. 静态变量方式:
步骤:声明、创建、并对外提供访问的方式
(1)声明、创建:
在成员变量的位置声明并创建一个Singleton类型的静态成员变量。
(2)对外提供访问方式:
对外提供静态方法getInstance(),让外界获取该对象
类的加载就会创建instance对象。若该对象很大,一直没有使用就会造成内存的浪费。
/*
* 1 饿汉式
* 2、在成员变量位置声明并创建该类的唯一对象
*/
public class Singleton {
// 1. 私有构造方法
private Singleton(){
}
// 2. 在成员变量位置中声明并创建本类的对象
private static Singleton instance = new Singleton(); // 饿汉式:静态成员变量
// 3. 提供一个公共的访问方式,让外界获取该对象
// 3.1 对外提供静态方法,让外界获取该对象
public static Singleton getInstance() {
return instance;
}
}
1.2.2 方式2——饿汉式(静态代码块方式)
2. 静态代码块方式:
步骤:声明、创建、并对外提供访问的方式
(1)声明:
在成员变量的位置声明一个Singleton类型的静态成员变量;
(2)创建:
在静态代码块位置创建该类的对象
(3)对外提供访问方式:
对外提供静态方法 getInstance(),让外界获取该对象
同样也存在内存浪费。
/*
* 1.饿汉式
* 2、在成员变量位置声明该类的唯一对象
* 2.1 在静态代码块中创建该类的唯一对象
*/
public class Singleton {
// 1. 私有构造方法
private Singleton(){
}
// 2. 在成员变量位置中声明本类的对象
private static Singleton instance;
// 2.1 在静态代码块中创建本类的对象
static {
instance = new Singleton(