关于java:设计模式之单例模式

42次阅读

共计 1592 个字符,预计需要花费 4 分钟才能阅读完成。

单例模式(Singleton Pattern)是 Java 中最简略的设计模式之一。这种类型的设计模式属于创立型模式,它提供了一种创建对象的最佳形式。

这种模式波及到一个繁多的类,该类负责创立本人的对象,同时确保只有单个对象被创立。这个类提供了一种拜访其惟一的对象的形式,能够间接拜访,不须要实例化该类的对象。

留神:

  • 1、单例类只能有一个实例。
  • 2、单例类必须本人创立本人的惟一实例。
  • 3、单例类必须给所有其余对象提供这一实例。

实现形式

懒汉式、线程不平安

形容:最根本的实现形式,在内部调用时才会加载,线程不平安

public class LazySingleton {
    private static LazySingleton intstance;
    public LazySingleton(){}

    public static LazySingleton getInstance(){if (intstance == null){intstance = new LazySingleton();
        }
        return intstance;
    }
}

懒汉式、线程平安

形容:线程平安,必须加锁 synchronized 能力保障单例,但加锁会影响效率

public class LazySingleton {
    private static LazySingleton intstance;
    private LazySingleton(){}

    public static synchronized LazySingleton getInstance(){if (intstance == null){intstance = new LazySingleton();
        }
        return intstance;
    }
}

饿汉式

形容:在类加载时就初始化创建对象,线程平安,但不论是否应用都创建对象可能会节约内存

public class HungrySingleton {private static HungrySingleton intstance = new HungrySingleton();
    private HungrySingleton(){}

    public static  HungrySingleton getInstance(){return intstance;}
}

双重查看锁

形容:应用 volatile 以及多重查看来减小锁范畴,晋升效率

public class DoubleCheckSingleton {private DoubleCheckSingleton(){}
   private volatile static DoubleCheckSingleton instance;

   public static DoubleCheckSingleton getInstance(){if (instance == null){synchronized (DoubleCheckSingleton.class){if (instance == null){instance = new DoubleCheckSingleton();
               }
           }
       }
       return instance;
   }
}

动态外部类

形容:同时解决饿汉式的内存节约问题和懒汉式的线程平安问题

public class StaticSingleton {private StaticSingleton(){}
    private static class StaticClass{public static final StaticSingleton instance = new StaticSingleton();
    }
    
    public static StaticSingleton getInstance(){return StaticClass.instance;}
}

枚举

形容:Effective Java 作者 Josh Bloch 提倡的形式,不仅能避免反序列化从新创立新的对象,相对避免屡次实例化,也能避免反射破解单例的问题

public enum EnumSingleton {INSTANCE;}

正文完
 0