在编程时我们经常遇到一些经典的问题或者需要完成某种特定需求设计模式就是针对这些问题和需求,在大量实践中总结优选的代码结构和编写风格解决问题的思考方式,设计模式就行棋谱,不同的棋局,我们需要不同的解决方式。
单例模式是java中的一种设计模式,它是指在设计一个类时,需要保证整个过程只存在一个实例对象。就像我们生存的世界上只有一个月亮。
饿汉模式:
class Single1{
/*
* 1.在类的内部创建一个实例对象,并使用静态变量修饰该对象(static),
由于变量禁止外界访问所以使用private修饰,声明为私有成员。
static修饰成员变量,该变量称为静态变量,被所有实例所共享。
*/
private static Single1 INSTANCE=new Single1();
/*
*2.类的构造方法使用private修饰,声明为私有,这样就不能在类的外部使用new关键字来创建实例对象了。
*/
private Single1(){ }
/*
* 3.静态方法不需要创建对象就可以调用,类名.方法名。
* 为了让外部能够获取类的实例,需要定义一个静态方法,用户返回该类的实例INSTANCE。
*/
public static Single1 getInstance(){
return INSTANCE;
}
}
Single1 s1=Single1.getInstance();
Single1 s2=Single1.getInstance();
System.out.println(s1==s2);
结果:true;
饿汉模式是最简单的一种实现方式,饿汉模式在类加载的时候就对实例进行创建,实例在整个程序周期都存在。它的好处是只在类加载的时候创建一次实例,不会存在多个线程创建多个实例的情况,避免了多线程同步的问题。它的缺点也很明显,即使这个单例没有用到也会被创建,而且在类加载之后就被创建,内存就被浪费了。
这种实现方式适合单例占用内存比较小,在初始化时就会被用到的情况。但是,如果单例占用的内存比较大,或单例只是在某个特定场景下才会用到,使用饿汉模式就不合适了,这时候就需要用到懒汉模式进行延迟加载。