单例模式
单例模式顾名思义就是类中只有一个对象,当某种功能有作用域的需求,如HttpSession,产生多例对象只会造成资源的浪费,也不满足需求。因此单例模式成为了必要。
懒汉式:顾名思义,只有请求时才生成对象,这就是懒汉式,同时还要注意多个用户同时请求,防止多次生成的情况,因此要考虑多线程情况。
package com.xcy.singleton;
public class Singleton {
private static Singleton singleton;
//构造方法必须私有化,防止随意生成实例
private Singleton(){}
//获得实例对象必须静态方法,通过类调用
public static Singleton getInstance(){
//添加逻辑如果实例化过,直接返回
if (singleton==null) {
/*
* 多线程访问下,可能出现if同时成立的情况,添加锁
*/
synchronized(Singleton.class){
//双重验证
singleton = new Singleton();
}
}
return singleton;
}
}
测试类:
package com.xcy.singleton;
public class Test {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton==singleton2);//返回true ,表明是同一个对象
}
}
饿汉式:顾名思义,加载类的同时直接生成好对象,更加方便不用考虑多线程问题。
package com.xcy.singleton;
public class Singleton {
//直接生成好实例对象
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
测试类:
package com.xcy.singleton;
public class Test {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton==singleton2);//返回true ,表明是同一个对象
}
}