本文参考ImportNew中的文章:http://www.importnew.com/6662.html
单例模式是java中常使用的一种设计模式,通过阻止外部实例化来修改,来控制所建对象的数量。
单例模式的特点:
1. 构造函数私有化;
2. 建立自己私有化的实例;
3. 创建公共静态方法,为外界提供调用单一实例的接口。
下面看一个单例模式的例子:
Singleton Class: 采用单例模式
package com.base;
public class Singleton {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Singleton(){}
private static Singleton singleTon = null;
public static Singleton getSingleTon(){
if(singleTon == null) {
singleTon = new Singleton();
}
return singleTon;
}
public void getInfo() {
System.out.println("output message " + name);
}
}
NormalClass: 没有采用单例模式
package com.base;
public class NormalClass {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public NormalClass() {}
public void getInfo() {
System.out.println("output message " + name);
}
}
Main Method: 清楚的看到差异
package com.base;
public class TestSingleTon {
public static void main(String[] args) {
Singleton sing = Singleton.getSingleTon();
sing.setName("Peter");
System.out.println(sing.getName());
Singleton sing_2 = Singleton.getSingleTon();
sing_2.setName("Peter");
System.out.println(sing_2.getName());
sing.getInfo();
sing_2.getInfo();
if(sing == sing_2) {
System.out.println("They are the same instance.");
} else if(sing != sing_2) {
System.out.println("They are different.");
} else {
System.out.println("application error");
}
System.out.println();
NormalClass normal = new NormalClass();
normal.setName("Tom");
System.out.println(normal.getName());
NormalClass normal_2 = new NormalClass();
normal_2.setName("Tom");
System.out.println(normal_2.getName());
normal.getInfo();
normal_2.getInfo();
if(normal == normal_2) {
System.out.println("They are the same instance: Tom.");
} else if(normal != normal_2) {
System.out.println("They are different: Tom.");
} else {
System.out.println("application error: Tom.");
}
}
}
对比输出结果:
Peter
Peter
output message Peter
output message Peter
They are the same instance.
Tom
Tom
output message Tom
output message Tom
They are different: Tom.