单例设计模式:保证类在内存中只有一个对象
/*
*
* 单例设计模式:保证类在内存中只有一个对象
*/
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;
}
}
class singleton3 {
//1.创建本类对象,但不实例化
public static final singleton3 s= new singleton3();
//2.私有化构造方法
private singleton3 () {
}
//3.对外提供公共的访问方法
public static singleton3 getinstance() {
return s;
}
}
如对本文有疑问, 点击进行留言回复!!
网友评论