昨晚睡不着,学习了一下设计模式(Design Pattern)中的单例模式(Siglenton Pattern).
所谓单例模式,就是在系统或者模块中该类存在且只能存在一个实例,废话不多说,直接上代码。
首先懒的单例模式
SiglentonLazy.java
package guancan.siglentonPattern;
public class SiglentonLazy {
/*构造函数,必须声明为私有,因为单例故名思意就是
该类的实例只能有一个,现在先介绍单例模式中的懒模式
所谓懒模式就是指该类在被调用的时候才被JVM加载
by guancan 20141213
*/
//构造函数私有,保证该类不会在外面被实例化
private SiglentonLazy(){
}
//声明该类的一个成员变量,即该类的一个实例,为了保证对象的唯一性,
//该成员变量必须要是static 的,即该成员是类成员不是对象成员(
//static的使用有空再说)
private static SiglentonLazy instance;
//获取类的成员对象,同时只有在需要调用的时候该类才会被JVM加载
public static SiglentonLazy getInstance(){
if(instance == null){
instance = new SiglentonLazy();
}
return instance;
}
}
其次饥饿的单例模式 SiglentonHungry.java
package guancan.siglentonPattern;
/*顾名思义,饥饿的单例模式就是这个对象比较饥饿,在JVM开始加载类的时候就要
* 把该类的实例加载 add by guancan 22141213
* */
public class SiglentonHungry {
//构造函数,因其私有所以不能在外部被实例化
private SiglentonHungry(){
}
//在成员变量中直接实例化,保证类的实例始终存在
private static SiglentonHungry instance = new SiglentonHungry();
//暴露给外部的成员变量
public static SiglentonHungry getInstance(){
return instance;
}
}
最后测试代码 Test.java
package guancan.siglentonPattern;
//测试代码 add by guancan 20141213
public class Test {
public static void main(String[] args){
SiglentonLazy s1 = SiglentonLazy.getInstance();
SiglentonLazy s2 = SiglentonLazy.getInstance();
//创建两个SiglentonLazy的实例,如果是单例模式二者应该是同一个实例
if(s1.hashCode() == s2.hashCode()/*s1 == s2*/){
System.out.println("懒的单例模式");
}else{
System.out.println("不是懒模式");
}
//创建两个SiglentonHungry的实例,如果是单例模式二者应该是同一个实例
SiglentonHungry s3 = SiglentonHungry.getInstance();
SiglentonHungry s4 = SiglentonHungry.getInstance();
if(s3.hashCode() == s4.hashCode()/*s3 == s4*/){
System.out.println("饥饿的单例模式");
}else{
System.out.println("不是懒模式");
}
}
}
总结:都在注释里了,单例模式应用如系统时钟类等,凡是只能有一个实例的就用单例模式