类的单态设计模式:使某个类只存在一个对象实例,并且该类只提供一个取得该对象实例的方法
public class China{
//在类中实例化一个对象
static China objRef=new China();
//定义一个获取实例的方法 在类外可以调用getInstance()方法
public static China getInstance(){
//类外无论调用多少次方法 其返回的始终是objRef对象;
return objRef;
}
//将构造函数私有,类外不可实例化
private China(){
}
}
public class TestChina{
public void main(String [] args){
China obj1=China.getInstance();
China obj2=China.getInstance();
System.out.println(obj1==obj2);
}
}
上述方法的运行结果为ture即obj1和obj2引用的都是一个对象使某个类只存在一个对象实例,并且该类只提供一个取得该对象实例的方法。
代码一:
public class China{
//在类中实例化一个对象
static China objRef=new China();
//定义一个获取实例的方法 在类外可以调用getInstance()方法
public static China getInstance(){
//类外无论调用多少次方法 其返回的始终是objRef对象;
return objRef;
}
//将构造函数私有,类外不可实例化
private China(){
}
}
public class TestChina{
public void main(String [] args){
China obj1=China.getInstance();
China obj2=China.getInstance();
System.out.println(obj1==obj2);
}
}
上述方法的运行结果为ture即obj1和obj2引用的都是一个对象
对比视频下面是学校老师在讲单态模式时的程序代码:
代码二:
public class China{
private static China ch=null;
public China(){
}
public static China getInstance(){
if(ch==null){
ch=new China();
}
return ch;
}
public static void shout(){
System.out.println("abc");
}
}
class TestChina{
public static void main(String [] args){
China obj1=China.getInstance();
China obj2=China.getInstance();
System.out.println(obj1==obj2);
China obj3=new China();
obj3.shout();
China obj4=new China();
obj4.shout();
System.out.println(obj3==obj4);
}
}
通过对比调试上面程序的运行结果为:
true
abc
abc
flase
思考:在代码二中,构造函数还是为公有,在main()函数中也可以就行实例化(obj3和obj4),并且是两个不同的对象。而在对于getInstance()方法的引用时引用的是同一个对象,该方法的引用时达到了只在存在一个对象的目的。只是不知道代码二中的方式还是单态模式吗?