设计模式(3)单例模式

定义:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

常见的场景:

1、项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次new一个对象去读取。

2、有些工厂类需要实例化对象的,要基于实例化对象,来实现继承、接口、实现等功能,工厂实例可以做成单例的,就可以了

3、如果是一个类的实例只需要保持一份。

饿汉式:

public class HungrySingletonPatternDemo {

    public static class Singleton {

        private static final Singleton instance = new Singleton();

        private Singleton() {
        }

        public static Singleton getInstance() {
            return instance;
        }

        public void execute() {
            System.out.println("单例类的方法");
        }

    }
}

线程不安全的懒汉式:

public class UnsafeFullSingletonPatternDemo {

   public static class Singleton {
      
      private static Singleton instance;
      
      private Singleton() {
      }
      
      public static Singleton getInstance() {

         if(instance == null) {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

线程安全的懒汉式:

public class SafeFullSingletonPatternDemo {
   
   public static class Singleton {
      
      private static volatile Singleton instance;
      
      private Singleton() {
      }
      
      public static Singleton getInstance() {
         if(instance == null) {
            synchronized(SafeFullSingletonPatternDemo.class) {
               if(instance == null) {
                  instance = new Singleton();
               }
            }
         }
         return instance;
      }
   }
   
}

静态内部类:

public class InnerClassFullSingletonPatternDemo {

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

枚举类:

public enum EnumSingletonPatternDemo {
    
    //这个枚举元素,本身就是单例对象!
    INSTANCE;
    
    //添加自己需要的操作!
    public void singletonOperation(){
    }
}

猜你喜欢

转载自blog.csdn.net/qq40988670/article/details/86640783