好像在不同的时间段,对设计模式的理解都不同。也可能是又一次学习,所以拔高。也可能是所站角度不同,以前是学习,现在是想应用🤔。也许是单例模式简单?
单例模式
因为只想要一个对象。所以提供一个获取对象的方法,只在对象为空的时候创建。
如果写成实例可能有点抽象。
但是如果这样想呢?
你从前台传到后台一个对象,想为这个对象赋一些值然后传到数据库。
但是这个对象为空,为空的话就不能赋值,会报错,所以你需要在对象为空的时候为这个对象初始化。
避免多余实例化
判断对象是否为空:如果对象没有实例化就会实例化一个。如果实例化过,就不会实例化了。
package 单例模式;
/**
* 计时器
* @author 李
*
*/
public class TimeCount {
}
package 单例模式;
public class MainTest {
public static void main(String[] args) {
}
/**
* 获取计时器
* @return
*/
public TimeCount getTime(TimeCount timeCount) {
if (timeCount == null) {
timeCount = new TimeCount();
}
return timeCount;
}
}
让被实例化自己控制仅生成一个实例
但是人们懒了,觉得这个对象初始化,这个action要用,另个action也要用,好麻烦呀,重复代码。怎么办呢?
多线程时的单例
同时多个线程访问上述方法就会有多个实例,所以需要给其加把锁,保证同一时刻只有一个线程访问。但是加锁还要等待,所以可以折中一下,利用java的加载机制——static
public class TimeCount {
//instance 在类装载时就实例化
private static TimeCount instance = new TimeCount();
//私有化构造方法,让其他类无法访问
private TimeCount (){}
//提供唯一入口
public static TimeCount getInstance() {
return instance;
}
}