简单说说懒汉模式
发现单例模式的getInstance()方法总是在自身类中定义,为什么不在其他类中定义?
public class Object {
private static Object obj;
private int id=1;
private Object(){}
static Object getInstance(){
if(obj==null){
obj=new Object();
}
return obj;
}
public static void main(String[] args) {
Object obj = getInstance();
System.out.println(obj.id); //1
System.out.println(obj.obj.id); //1
System.out.println(obj.obj.obj.id); //1
}
}
重新定义一个Object类
public class Object2 {
private int id=2;
}
这次在工厂类中调用getInstance()方法
public class ObjectFactory {
private static Object2 o2;
static Object2 getInstance(){
if(o2 ==null){
o2 =new Object2();
}
return o2;
}
public static void main(String[] args){
Object2 o = Object2Factory.getInstance();
System.out.println(o.id); //语法错误,o不能访问id
}
}
结论:在自身类调用getInstance()的优点是可以访问类的所有属性和方法,
而在其他类中实例化,由于不能访问类的私有属性和方法,意义不大。