单例模式:
无论创建多少个对象,实质都是同一个对象。
(1) 目的: 使类的一个对象成为该类系统中的唯一实例
(2) 定义: 一个类有且只有一个实例,并且自行实例化向整个系统提供
(3) 要点: 一个类只能有一个实例
必须子集创建实例
必须自行向整个系统提供这个实例
(4) 实现方法: 只提供私有的构造方法
含有一个该类的静态私有对象
提供一个静态的共有方法用于创建、获取静态私有对象
(5) 分类: 饿汉式 懒汉式
// 饿汉式 --> 对象创建中实例化
public class Earth{
//1、 私有构造方法
private Earth(){}
//2、 自行实例化
private static Earth earth = new Earth();
//3、 提供公共方法
public static Earth getInstance(){ return earth;}
}
public class SingletonTest{
public static void main(String args[]){
Earth e1 = Earth.getInstance();
Earth e2 = Earth.getInstance();
System.out.println( e1 == e2 ); //true
System.out.println( e1.equals(e2)); //true
}
}
//懒汉式 --> 静态公有方法中实例化
public class Emperor{
private Emperor(){}
private static Emperor e = null;
public static Emperor getInstance(){
if( em == null)
e = new Emperor();
return e;}
}
饿汉式与懒汉式的区别:
饿汉式 --> 立即获得 以空间换时间 注重速度
懒汉式 --> 延迟获得 以时间换空间 注重效率
(6) 优点: 内存只有一个对象 节省内存空间
避免频繁的创建、销毁对象 提高性能
对共享资源的合理利用
(7) 缺点: 扩展比较困难 长期不用(60s) 系统自动垃圾回收 造成对象丢失
最简单的单例实现: