以最简单的方式了解设计模式中的单例模式
单例模式:
即一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般只能通过get方法获取到他们的实例。
分类:懒汉式、饿汉式
①懒汉式:线程不安全
public class Singleton{
// 私有化构造静态参数
private static Singleton singleton;
// 私有化无参构造
private singleton(){};
// 公共的静态方法
public static Singleton getInstance(){
if(singleton == null){
singleton == new singleton();
}
return singleton;
}
}
②懒汉式:线程安全
public class Singleton{
// 私有化构造静态参数
private static Singleton singleton;
// 私有化无参构造
private singleton(){};
// 公共的静态方法
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton == new singleton();
}
return singleton;
}
}
③饿汉式
public class Singleton{
// 私有化构造静态参数,只要加载就创建对象
private static Singleton instance = new Singleton();
// 私有化无参构造
private singleton(){};
// 公共的静态方法
public static synchronized Singleton getInstance(){
return singleton;
}
}
④静态内部类
⑤枚举:枚举可以解决多线程同步问题,还能防止反序列化重新创建对象,jdk 1.5以后才又枚举。
public enum Singleton{
INSTANCE;
public void whateverMethod(){
}
}
⑥双重校验锁
应用场景:
- 在spring中创建bean实例默认都是单例模式
- Windows的任务管理器
- Windows的回收站
- 网站的计数器
- 应用程序的日志