单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
1 饿汉式---单例模式
饿汉式 特点:
1. 构造器要私有化;
2. 奔雷的对象,作为 本类的属性存在,用 static 修饰;
static 修饰 静态的,保证只加载一次,不会重复创建对象;
3. 公共的静态的方法,可以通过该方法,拿到属性;
优缺点:
优点: 安全;
缺点: 可能会导致,对象创建过早!
2 懒汉式---单例模式
懒汉式 特点:
懒汉式 单例模式,是在 饿汉式 单例模式下修改得到的;
1. 构造器私有化;
2. 本类的对象作为本类的属性存在,static 修饰,但是不进行初始化?
3. 公共的静态的方法,并且判断是否给属性赋值;
优缺点:
优点:
对象总是在被需要的时候才创建,解决了对象可能加载实际过早的问题;
缺点:
在程序的初期,线程不安全;
3 双重检索式---单例模式
双重检索式 特点:
双重检索式 是在 懒汉式的基础上 修改的;
1. 构造器私有化;
2. 本类的对象作为本类的属性存在;
3. 公共的静态的方法,并且判断是否给属性赋值;
synchronized 介绍:
synchronized 代码块,也就是 synchronized 锁;要求同一时间只有一个线程进入代码块区域;
缺点: 因为jvm内存模型的原因,双重检索也会有微小的可能发生问题;
4 静态内部类式---单例模式
静态内部类式
1. 定义了一个静态内部类;
2. 外部类构造器私有化;
3. 外部类的对象,作为内部类的属性存在;
4. 公共的静态的方法;
解决了,对象创建时机过早的问题;
没有产生线程的安全问题;
外部类加载的时候,静态内部类并不会被加载!!!!!!!!!通过静态语句块可以测试;