概要

  • 单例模式属于创建者类型
  • 构造方法私有
  • 提供一个公开的静态方法获取对象实例

    懒汉式

  • 比较懒嘛,所以用的时候才创建实例对象

  1. public class LazySingleton {
  2. private static LazySingleton singleton;
  3. private LazySingleton() {
  4. }
  5. public static LazySingleton getInstance() {
  6. if (singleton == null) {
  7. synchronized (LazySingleton.class) {
  8. if (singleton == null) {
  9. singleton = new LazySingleton();
  10. }
  11. }
  12. }
  13. return singleton;
  14. }
  15. }

饿汉式

  • 饿汉,等不及了,所以是提前创建对象
  1. public class HungrySingleton {
  2. private HungrySingleton singleton = new HungrySingleton();
  3. private HungrySingleton() {
  4. }
  5. public HungrySingleton getSingleton(){
  6. return singleton;
  7. }
  8. }

静态内部类

  1. public class InnerClassSingleton {
  2. private InnerClassSingleton() {
  3. }
  4. private static class Inner {
  5. private static final InnerClassSingleton singleton = new InnerClassSingleton();
  6. }
  7. public static InnerClassSingleton getInstance() {
  8. return Inner.singleton;
  9. }
  10. }

枚举

  • 枚举默认构造方法私有
  1. public enum SingletonEnum {
  2. ONE,
  3. TWO,
  4. THREE;
  5. public static SingletonEnum getOne(){
  6. return ONE;
  7. }
  8. public static SingletonEnum getTwo(){
  9. return TWO;
  10. }
  11. public static SingletonEnum getThree(){
  12. return THREE;
  13. }
  14. }