java中的设计模式“饿汉模式”和“懒汉模式”
单例模式,就是这个类的对象在我们的堆内存中只能存在一份,
我们new一个对象的时候,无非就是调用这个类的构造函数,
我们把构造函数用关键字private私有化了,外界就new不到了,然后我们再自己内部提供 该类的实例化供外界调用,就能达到单例的效果了
1. 饿汉模式
所谓的饿汉模式顾名思义,我很饿了一开始我就把我自己的对象创建了,外界来调用的时候不需要再创建了。
public class DesignPatterns {
public static void main(String[] args) {
//获取HungryMan类的实例化对象hungryMan1
HungryMan hungryMan1 = HungryMan.getHungryMan();
//再获取HungryMan类的一个实例化对象hungryMan2
HungryMan hungryMan2 = HungryMan.getHungryMan();
//比较HungryMan两个对象,返回true,说明他两个是同一个对象
System.out.println(hungryMan1 == hungryMan2);
}
}
//饿汉模式,所谓的饿汉模式顾名思义,我很饿了一开始我就把我自己的对象创建了,外界来调用的时候不需要在创建了。
class HungryMan{
/*
* 单例模式,就是这个类的对象在我们的堆内存中只能存在一份,
* 我们new一个对象的时候,无非就是调用这个类的构造函数,
* 我们把构造函数用关键字private私有化了,外界就new不到了,然后我们再自己内部提供该类的实例化供外界调用,就能达到单例的效果了
*/
//私有化构造器,禁止外界直接new到我们的对象
private HungryMan(){
}
//创建该类的实例化对象,也就是自己new一个自己的对象
private static HungryMan HUNGRY_MAN = new HungryMan();
//提供外界获取我这个类的实例化对象的公共方法
public static HungryMan getHungryMan(){
return HUNGRY_MAN;
}
}
2. 懒汉模式
顾名思义就是我很懒,我不预先给你给实例化,你们需要的时候如果我被实例化过了就直接拿之前实例化的,如果没有就创一个。
public class DesignPatterns {
public static void main(String[] args) {
//获取LazyMan类的实例化对象LazyMan1
LazyMan LazyMan1 = LazyMan.getLazyMan();
//再获取LazyMan类的一个实例化对象LazyMan2
LazyMan LazyMan2 = LazyMan.getLazyMan();
//比较LazyMan两个对象,返回true,说明他两个是同一个对象
System.out.println(LazyMan1 == LazyMan2);
}
}
//懒汉模式
//顾名思义就是我很懒,我不预先给你给实例化,你们需要的时候如果我被实例化过了就直接拿之前实例化的,如果没有就创一个。
class LazyMan{
//私有化构造器,禁止外界直接new到我们的对象
private LazyMan(){
}
//创建该类的实例化对象,也就是自己new一个自己的对象
private static LazyMan LAZY_MAN;
//提供外界获取我这个类的实例化对象的公共方法
public static LazyMan getLazyMan(){
//判断LAZY_MAN是否为null,如果为null,即判定需要实例化,否则直接用原来的
if (LAZY_MAN == null) {
LAZY_MAN = new LazyMan();
}
return LAZY_MAN;
}
}