设计模式之(单例模式)
方式1
由于静态变量随着累的加载而加载,所以此方式适用于“急切”创建实例。
/** * Created by view_man on 2016/11/30. */ public class SingleInstanceI { private SingleInstanceI() { } private static SingleInstanceI instance = new SingleInstanceI(); public static SingleInstanceI getSingleInstanceI() { return instance; } @Override public String toString() { return "This is SingleInstanceI"; } }
方式2
此方式属于延迟实例化的做法,如果没有方式1的那种需求,建议使用方式2。
/** * Created by view_man on 2016/11/30. */ public class SingleInstanceII { private SingleInstanceII() { } private static SingleInstanceII instance = null; public static SingleInstanceII getSingleInstanceII() { if (instance == null) { instance = new SingleInstanceII(); } return instance; } @Override public String toString() { return "This is SingleInstanceII"; } }
方式2-1
/** * Created by view_man on 2016/11/30. */ public class SingleInstanceIII { private SingleInstanceIII() { } private static SingleInstanceIII instance = null; public static synchronized SingleInstanceIII getSingleInstanceIII() { if (instance == null) { instance = new SingleInstanceIII(); } return instance; } @Override public String toString() { return "This is SingleInstanceIII"; } }
方式2-2
为了处理多线程,我们将方式2改为方式2-1,但这种方式存在以下问题:
1、由于线程安全,涉及到性能的下降
仔细观察,发现只有在第一次执行此方法时,
getSingleInstanceIV()才真正需要同步,所以可将方式2-1优化成为方式2-2,如下所示:
/** * Created by view_man on 2016/11/30. */ public class SingleInstanceIV { private SingleInstanceIV() { } private static SingleInstanceIV instance = null; public static SingleInstanceIV getSingleInstanceIV() { if (instance == null) { synchronized (SingleInstanceIV.class) { if (instance == null) { instance = new SingleInstanceIV(); } } } return instance; } @Override public String toString() { return "This is SingleInstanceIV"; } }
微信:feifie254
QQ:645139778
csdn:http://blog.csdn.net/qq645139778 或者(搜索 view-man)
GitHub:https://github.com/view-man
知乎:view-man关注公众号:孙益飞