对单例模式学习之后的理解
单例模式
从单例模式的概念可以得知要先创建一个对象,那就必须要有构造方法,然后因为在其他类中我们可以创建无数个对象,所以要把构造方法私有化。
package com02;
public class SingleDemo {
private SingleDemo() {
}
}
那么这时其他类就创建不了对象, 只能在本类中创建,那么我们就定义一个SingleDemo类的属性当做对象
package com02;
public class SingleDemo {
private SingleDemo singleDemo;
private SingleDemo() {
}
}
然后写一个获取这个属性对象的方法getSingleDemo(),在方法中判断一下对象是否为空,如果为空,就创建一个,此时我们就有了一个对象;如果不为空,证明已经有了一个对象,那么就直接返回这个对象。
package com02;
public class SingleDemo {
private SingleDemo singleDemo;
private SingleDemo() {
}
public SingleDemo getSingleDemo() {
if(singleDemo==null) {
singleDemo = new SingleDemo();
}
return singleDemo;
}
}
现在通过其他类来获取这个对象时,发现陷入了调用get方法获取对象—>没有对象—>调用 get方法获取对象的死循环,这时我们可以想到用类名.方法名的形式来调用这个方法,那么此时方法就必须加上static,静态方法是在类加载时就自动执行,但是方法中的single此时并不存在,所以single属性也要加上static。
package com02;
public class SingleDemo {
private static SingleDemo singleDemo;
private SingleDemo() {
}
public static SingleDemo getSingleDemo() {
if(singleDemo==null) {
singleDemo = new SingleDemo();
}
return singleDemo;
}
}
测试
package com02;
public class Test {
public static void main(String[] args) {
SingleDemo demo1 = SingleDemo.getSingleDemo();
SingleDemo demo2 = SingleDemo.getSingleDemo();
System.out.println(demo1);
System.out.println(demo2);
System.out.println(demo1 == demo2);
}
}
测试结果