
一、单例恶汉式
如何实现单列恶汉式?
1.构造器私有化 杜绝外界创建对象
2.提供公共的方法 让外界有机会拿到本类的对象
3.本类的对象做为本类的属性存在 static 修饰
缺点:可能会导致对象创建的时机过早
1public class DesignClass {
2 static DesignClass dc = new DesignClass();
3
4 private DesignClass() {
5 System.out.println("DesignClass.DesignClass()");
6 }
7
8 public static DesignClass getDesign(){
9 return dc;
10 }
11}
二、单例懒汉式
单列懒汉式和 恶汉式对比有什么优缺点?
恶汉式优点 : 线程安全,不会产生多个对象仅有一个
恶汉式缺点 :可能导致对象创建时机过早
懒汉式优点:解决了可能导致对象创建时机过早的问题
懒汉式缺点:可能导致创建多个对象,尤其是在程序初期
1public class DesignClass {
2
3 private static DesignClass dc ;
4
5 private DesignClass() {
6 System.out.println("DesignClass.DesignClass()");
7 }
8
9 public static DesignClass getDesign(){
10 if(dc == null){
11 dc = new DesignClass();
12 }
13 return dc;
14 }
15}
三、单例双重检索式
单列双重检索式无缺点,不过因为jvm内存模型的原因,双重检索式可能有微小的几率出现问题。
1public class DesignClass {
2
3 private static DesignClass dc ;
4
5 private DesignClass() {
6 System.out.println("DesignClass.DesignClass()");
7 }
8
9 public static DesignClass getDesign(){
10 if(dc == null){ // 第一次检索
11 synchronized (DesignClass.class) {// 保证安全
12 if(dc == null){// 第二次检索
13 dc = new DesignClass();
14 }
15 }
16 }
17 return dc;
18 }
19}
四、单例静态内部类式
单列静态内部类式,解决了加载时机可能过早的问题,无缺点,在使用时推荐使用单列静态内部类式。
1public class DesignClass {
2
3 private DesignClass() {
4 System.out.println("DesignClass.DesignClass()");
5 }
6
7 static class Show{
8
9 static DesignClass dc = new DesignClass();
10
11 public static DesignClass getDesign(){
12 return dc;
13
14 }
15 }
16}
文章转载自Spark大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




