单例模式 懒汉式单例
package com.b;
/**
*
* 单例模式 懒汉式单例
* 类的实例在第一次被访问时才创建
*
* @author zhangli
* **/
public class SingletonTest1 {
//构造器私有,避免外部创建实例
private SingletonTest1(){}
private static SingletonTest1 classInstance = null;
//静态工厂方法,没有对象的实例时创建对象
public synchronized static SingletonTest1 getInstance(){
if(classInstance == null){
classInstance = new SingletonTest1();
}
return classInstance;
}
//test
public static void main(String[] args){
SingletonTest1 classInstance1 = SingletonTest1.getInstance();
SingletonTest1 classInstance2 = SingletonTest1.getInstance();
System.out.println(classInstance1.hashCode());
System.out.println(classInstance2.hashCode());
System.out.println(classInstance1.equals(classInstance2));
}
}
单例模式的 饿汉模式
package com.b;
/**
* 单例模式的 饿汉模式
* 在类被加载时类的唯一实例就被创建了
* @author zhangli
* */
public class SingletonTest2 {
//类被加载时,实例就被创建
private static final SingletonTest2 classInstance = new SingletonTest2();
private SingletonTest2(){}
public static synchronized SingletonTest2 getInstance(){
return classInstance;
}
//test
public static void main(String[] args){
SingletonTest2 classInstace1 = SingletonTest2.getInstance();
SingletonTest2 classInstace2 = SingletonTest2.getInstance();
System.out.println(classInstace1.hashCode());
System.out.println(classInstace2.hashCode());
}
}