1 单例模式
单例模式是指在内存中只会创建且仅创建一次对象的设计模式。
懒加载: 用到才创建
饥饿加载: 初始化就创建
jdk中的单列: Runtime()
2. 饿汉式-成员变量
/**
* 饥饿式: 静态成员变量的方式
* */
public class singleMod {
// 私有成员方法
private singleMod(){}
// 在本类中创建本类的对象
private static singleMod sing = new singleMod();
public static singleMod getSingle(){
return sing;
}
}
3. 饿汉式-静态代码块
/**
* 饿汉式: 静态代码块的方式
* */
public class singleMod2 {
// 私有成员方法
private singleMod2(){}
// 在本类中创建本类的对象
private static singleMod2 sing;
static {
sing = new singleMod2();
}
public static singleMod2 getSingle(){
return sing;
}
}
4. 懒汉式
package com.xjy.module;
/**
* 首次使用到才会创建对象
* 懒汉式
* */
public class singleMod3 {
// 私有成员方法
private singleMod3(){}
// 声明本类类型变量
// private static singleMod3 single;
// 声明本类类型变量,volatile关键字保证可见性和有序性
private static volatile singleMod3 single;
// 使用才创建,不使用不创建
public synchronized static singleMod3 getInstance(){
if (single == null) single = new singleMod3();
return single;
}
// 双重检查锁模式,提高了单环境运行的效率
public static singleMod3 getSingle(){
if (single == null) {
synchronized (singleMod3.class){
if (single == null) single = new singleMod3();
}
}
return single;
}
}
5. 懒汉式内部类模式
package com.xjy.module;
/**
* 首次使用到才会创建对象
* 懒汉式: 静态内部类模式
* */
public class singleMod5 {
// 私有成员方法
private singleMod5(){}
// jvm在加载类时不会加载静态的内部类,使用到静态内部类才会加载
private static class SingletHolder{
private final static singleMod5 single=new singleMod5();
}
// 提供公共访问方式
public static singleMod5 getInstance(){
return SingletHolder.single;
}
}
6. 枚举模式
// 枚举实现方式
public enum Singleton {
instance
}
package com.xjy.module;
public class test {
public static void main(String[] args) {
Singleton singleton = Singleton.instance;
Singleton singleton2 = Singleton.instance;
}
}