单例设计模式
1. 作用: 在应用程序中保证最多只能有一个实例.
2. 好处:
-
提升运行效率.
-
实现数据共享. 案例:application 对象 - tomcat启动时就创建,通过getServletContext()取出来
懒汉式
-
对象只有被调用时才去创建.
-
示例代码
public class SingleTon {
// 由于对象需要被静态方法调用,把方法设置为static
// 由于对象是static,必须要设置访问权限修饰符为static,如果是public可以直接调用对象,不执行访问入口
// 全局变量
private static SingleTon singleton;
/**
*把构造方法私有化,其他类不能实例化这个类对象
*但是需要对外提供访问入口 -
*/
private SingleTon(){}
/**
* 实例方法必须通过对象调用,需要new类创建对象,但是构造方法被私有,不能通过new创建对象,所以需要设置方法为静态方法
* 设置方法为静态方法
*/
public static SingleTon getInstance(){
// 添加逻辑,如果实例化过,直接返回
if(singleton==null){
// 多线程访问下,可能出现if同时成立的情况,添加锁
synchronized (SingleTon.class) {
// 双重验证
if (singleton==null) {
singleton = new SingleTon();
}
}
}
return singleton;
}
}
- 由于添加了锁,所以导致效率低.
饿汉式
-
解决了懒汉式中多线程访问可能出现同一个对象和效率低问题
public class SingleTon() { // 在类加载时进行实例化 private static SingleTon singleton = new SingleTon(); private SingleTon(){} public static SingleTon getInstance(){ return singleton; } }