• 单例模式


    单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

    主要优点:

    1) 减少创建Java实例所带来的系统开销 
    2) 便于系统跟踪单个Java实例的生命周期、实例状态等。


    主要缺点:
    1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
    2、单例类的职责过重,在一定程度上违背了“单一职责原则”。
    3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。

    一、懒汉式单例
    在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
    public class LazySingleton {

      /** * 私有静态对象,加载时候不做初始化 */
      private static LazySingleton m_intance=null;

      /** * 私有构造方法,避免外部创建实例 */
      private LazySingleton(){

      }
      /** 静态工厂方法,返回此类的唯一实例.当发现实例没有初始化的时候,才初始化. */
      synchronized public static LazySingleton getInstance(){

        if(m_intance==null){

          m_intance=new LazySingleton();

        }
        return m_intance;
      }
    }


    二、饿汉式单例
    在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

    public class EagerSingleton {

      /** * 私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象 */
      private static final EagerSingleton m_instance = new EagerSingleton();

      /** * 私有构造方法,避免外部创建实例 */
      private EagerSingleton() {

      }
      /** * 静态工厂方法,返回此类的唯一实例. * @return EagerSingleton */
      public static EagerSingleton getInstance() {

        return m_instance;

      }
    }

  • 相关阅读:
    Java并发理论简介
    【SQL】- 基础知识梳理(八)
    【SQL】- 基础知识梳理(七)
    【SQL】- 基础知识梳理(六)
    【SQL】- 基础知识梳理(五)
    【SQL】- 基础知识梳理(四)
    【SQL】- 基础知识梳理(三)
    '{ }'在不同上下文中的作用
    模块化你的JS代码
    利用模板将HTML从JavaScript中抽离
  • 原文地址:https://www.cnblogs.com/zhaojinhui/p/3884340.html
Copyright © 2020-2023  润新知