单例模式有饿汉模式和懒汉模式,通过下面代码,可以清楚的了解他们的原理
单例模式可以使整个项目中该类只有一个实例
HungrySingleton.java
package com.bright.singleton;
/*
* 单例模式--饿汉模式
*/
public class HungrySingleton {
//1,将构造方法私有化
private HungrySingleton(){
}
//2,创建唯一实例
private static HungrySingleton instance=new HungrySingleton();
//3,提供一个获取实例的方法
public static HungrySingleton getInstance(){
return instance;
}
}
LazySingleton.java
/*
* 单例模式--懒汉模式
*/
public class LazySingleton {
//1,将构造方法 私有化
private LazySingleton(){
}
//2,声明类唯一实例,只声明,不实例化,使用private static 修饰
private static LazySingleton instance;
//3,提供一个获取实例的方法,使用public static 修饰
public static LazySingleton getInstance(){
if(instance==null){
instance=new LazySingleton();
}else{
}
return instance;
}
}
Test.java
package com.bright.test;
import com.bright.singleton.HungrySingleton;
import com.bright.singleton.LazySingleton;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//得到两个懒汉模式的实例
LazySingleton s1= LazySingleton.getInstance();
LazySingleton s2= LazySingleton.getInstance();
//得到两个饿汉模式的实例
HungrySingleton s3=HungrySingleton.getInstance();
HungrySingleton s4=HungrySingleton.getInstance();
//分别判断他们是否相等
if(s1==s2){
System.out.println("s1与s2相等");
}else{
System.out.println("s1与s2不相等");
}
if(s3==s4){
System.out.println("s3与s4相等");
}else{
System.out.println("s3与s4不相等");
}
}
}
运行可知 s1与 s2相等
s3 与s4等