在JAVA当中,如果我们需要创建一个对象,一般是通过该类new()一个对象,但是如果在程序当中很多地方都需要用到该对象,我们不可能这样随心所欲的通过new()来创建对象,因为每当我们new一个对象的时候,都会消耗对应的内存资源,如果该对象的内容足够大的话,因为内存资源的有限,这种做法很不可取。
因为我们一般使用的时候往往只需要用到该对象的一个或者几个属性,并不是全部都会去调用,所以我们可以通过单例模式来解决这个问题。
单例模式又可以分为懒汉,饿汉,双重锁以及IODH这几种模式,我们可以根据实际需求进行设计:
首先,懒汉模式:
懒汉模式是单例模式的一种,对象在需要使用的地方才会被通过getinstance()方法创建
1 public class LazySingleton {
2 private static LazySingleton instance = null;
3
4 private LazySingleton() {
5 }
6
7 public static LazySingleton getInstance() {
8 if (instance == null) {
9 instance = new LazySingleton();
10 }
11 return instance;
12 }
13
14 public static void main(String[] args) {
15
18
19 LazySingleton lsl1 = LazySingleton.getInstance();
20 LazySingleton lsl2 = LazySingleton.getInstance();
21 LazySingleton lsl3 = LazySingleton.getInstance();
22
23 System.out.println(lsl1);
24 System.out.println(lsl2);
25 System.out.println(lsl3);
26 }
27 }
其次,饿汉模式
饿汉模式相对于懒汉模式,对象的创建和产生提前了,在类加载的时候就已经被创建,对于一些需要提前创建或者准备的类,可以使用饿汉模式来设计这个类。
1 public class EagerSingleton {
4
5 private static final EagerSingleton instance = new EagerSingleton();
6
7
8 private EagerSingleton() {
9 }
10
11
12 public static EagerSingleton getInstance() {
13 return instance;
14 }
15
16 public static void main(String[] args) {
17
18 EagerSingleton egl1 = EagerSingleton.getInstance();
19 EagerSingleton egl2 = EagerSingleton.getInstance();
20 EagerSingleton egl3 = EagerSingleton.getInstance();
21
22
23 System.out.println(egl1 == egl2);
24 System.out.println(egl2 == egl3);
25 }
26 }
然后是Iodh模式
Iodh模式,我看来就是对饿汉模式从设计结构上面进行了一些改进或者优化,Iodh模式在对象的创建方式上是通过内部类来实现的,来,上代码
1 public class Singleton {
2
3 private Singleton() {
4 }
5
6 public static Singleton getInstance(){
7 return HolderClass.instance;
8 }
9
10 private static class HolderClass{
11
12 private final static Singleton instance = new Singleton();
13 }
14 }