单例模式
第一章介绍
单例设计模式:保证类在内存中只有一个对象
第二章饿汉式(上来就创建私有的本类对象)
/*
*
* 单例设计模式:保证类在内存中只有一个对象
*/
public static void main(String[] args) {
// Singleton s1= new Singleton(); //3.由于私有构造方法,类外无法直接new 对象
/*Singleton s1= Singleton.s;
Singleton s2= Singleton.s;
System.out.println(s1==s2);*/
//上述两行会导致能够修改s的值所以得私有成员变量
//5.重新通过get方法获得成员变量
Singleton s1= Singleton.getInstance();
Singleton s2= Singleton.getInstance();
System.out.println(s1==s2);
}
}
/*
* 饿汉式
*/
class Singleton{
//1.私有构造方法,类外无法直接new 对象,其他类无法访问该方法
private Singleton() {
}
//2.创建本类对象
// public static Singleton s =new Singleton();//会导致能够修改s的值所以得私有成员变量
private static Singleton s =new Singleton();
//4.对外提供公共的访问方法get方法
public static Singleton getInstance() {
return s;
}
}
第三章懒汉式(单例的延迟加载,用的时候再创建对象)
/*
* 懒汉式:单利模式的延迟加载模式
* 会有安全隐患
*/
class Singleton2 {
//1.创建本类对象,但不实例化
private static Singleton2 s;
//2.私有化构造方法
private Singleton2 () {
}
//3.对外提供公共的访问方法
public static Singleton2 getInstance() {
if(s==null) {
//多线程情况下,当线程1进入if后等待,cpu使用权被线程2抢去了也进入了if判断语句那么最终会造成多个对象被创建出来
//所以懒汉式一般不使用
s=new Singleton2();
}
return s;
}
}
第四章饿汉式和懒汉式的区别
- 饿汉式是空间换时间,在服务器启动的时候就创建了对象
- 懒汉式是时间还空间,在用的时候再创建对象,但是不推荐本模式
- 在多线程访问时,饿汉式不会创建多个对象,懒汉式有可能会创建多个对象
第五章单例模式的第三种方法final
class Singleton3 {
//1.创建本类对象,但不实例化
public static final Singleton3 s= new Singleton3();
//2.私有化构造方法
private Singleton3 () {
}
//3.对外提供公共的访问方法
public static Singleton3 getInstance() {
return s;
}
}
- 还没有人评论,欢迎说说您的想法!