Java有很多的设计模式,但是让我们一个个分析出来,可能就一脸蒙逼了,今天就和大家一块来分析一下Java中的一些常用的设计模式。今天先分析单例模式
单例模式的好处
举个例子:有一个类,里面有若干个公共方法,现在我项目中有200个页面会调用到这个类中的方法,怎么办?我们正常的思路可能是获取该类的实例对象,A a = new A(); 然后通过对象a,拿到里面的方法,这种思路是没有问题的,
但是,如果一个项目中有200个页面调用该类,我们是不是就得new 200个对象,这对内存是极大的浪费,但是单例就可以完美的解决了这样的情况。
饿汉式
1 package com.mjj.recyclerviewlocation; 2 3 /** 4 * Created by Administrator on 2017/11/15 0015. 5 * huangjialin 6 */ 7 public class SingletonTest { 8 9 private static SingletonTest singletonTest = new SingletonTest(); 10 11 /** 12 * 饿汉式 13 * @return 14 */ 15 public static SingletonTest getInstance(){ 16 return singletonTest; 17 } 18 }
看起来是不是简单粗暴,这种好处就是节省了时间,需要的时候,直接返回,省去了创建的时间,缺点就是一直占用内容。
懒汉式
1 package com.mjj.recyclerviewlocation; 2 3 /** 4 * Created by Administrator on 2017/11/15 0015. 5 * huangjialin 6 */ 7 8 public class SingletonTest { 9 private static SingletonTest singletonTest; 10 11 public SingletonTest() { 12 } 13 14 /** 15 * 懒汉式 16 * @return 17 */ 18 public static SingletonTest getSingletonTest() { 19 if (singletonTest == null) { 20 synchronized (SingletonTest.class) { 21 if (singletonTest == null) { 22 singletonTest = new SingletonTest(); 23 } 24 } 25 26 } 27 28 29 return singletonTest; 30 } 31 32 33 }
懒汉式相对于恶汉式来说,代码多一些,但是好处呢就是不占用内存,缺点就是相对恶汉式来说比较耗时。
可能很多人无法理解外层有了一个判断,里面为什么还需要一个判断?这是为了预防高并发的情况,从而达到线程安全。
上面两种,线程都是安全的,选用那种,取决与自己的实际情况。