1. 单例模式【一种设计模式,只能有一个对象】
设计模式:
软件开发中也有很多常见的 "问题场景". 针对这些问题场景, 大佬们总结出了一些固定的套路. 按照
这个套路来实现代码, 也不会吃亏~
1)饿汉模式【只要程序用到了这个类,就会立即加载】
类加载的同时创建唯一对象~
优点:没有加锁,执行效率会提高 缺点:类加载时就初始化,浪费内存 class Singleton{ //在类加载时创建唯一对象 //在java程序中,一个类对象只存在一份,这样就保证了对象唯一,所以用static修饰 private static Singleton instance = new Singleton(); //为了保证后续不会创建对象,使用private定义构造方法 private Singleton(){} //提供一个方法,使得外面可以拿到对象 public static Singleton getInstance(){ return instance; } } public class Demo01 { public static void main(String[] args) { //拿到对象instance Singleton instance = Singleton.getInstance(); } }
2)懒汉模式
类加载的时候不创建对象,只有使用时才会创建对象
由于线程不安全,所以要加锁
class Singleton3{ //没有一开始就创建对象 //在java程序中,一个类对象只存在一份,这样就保证了对象唯一,所以用static修饰 private static volatile Singleton3 instance = null ; //对象要唯一,构造方法设置为private private Singleton3(){} //只有当调用该方法时才会创建对象 public static Singleton3 getInstance(){ //当instance初始化完成后,程序就只进行读操作,设置条件就不必再继续创建锁了 if(instance==null){ synchronized (Singleton3.class){//使用类对象作为锁对象 if(instance == null){ instance = new Singleton3(); }//一起加锁是要满足原子性 } } return instance; } } public class Demo03 { public static void main(String[] args) { //拿到对象instance Singleton2 instance = Singleton2.getInstance(); } }