下面内容纯手打:
单例模式,饿汉式
public class Singleton{
private Singleton(){}//私有构造方法
private static Singleton s = new Singleton(); //私有成员变量,让类一旦加载就创建对象用静态修饰
public static Singleton getInstance(){
return s; //提供公共的方法,将该方法用静态修饰,因为静态只能调用静态,所以需要成员变量要用static 修饰。
} //(个人理解)饿汉式之所以叫饿汉式,是因为在类一旦加载进来,就会创建出一个实例对象,节省了时间,浪费了空间,所以叫饿汉式。
}
单例模式,懒汉式
public class Singleton{
private Singleton(){}//私有构造方法
private static Singleton s; //私有成员变量,因为它懒,所以一开始不创建实例,引用类型成员变量默认初始化值为null,可以不用赋值。
// 以下是重点
public static synchronized Singleton getInstance(){
//补充:因为懒汉式没有在一开始的时候创建对象,所以在多线程使用时,又可能会因为延迟创建多个对象,所以,在公共的访问方法上,
//添加了一个关键字 synchronized 。这样保持线程同步,可以避免这个情况,达到真正的单例模式,这是对冯佳老师的视频的一个补充。
if (s == null){
s = new Singleton(); //创建对象。时间相对饿汉式,要久一点。
}
return s;
}
}
|