zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式定义:

      确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.

    创建过程:

    /**
     * 标准的单例模式代码结构
     */
    public class MySingleton {
        private static MySingleton ourInstance = new MySingleton();
    
        // 通过此方法获得对象实例
        public static MySingleton getInstance() {
            return ourInstance;
        }
    
        // 对外关闭构造方法
        private MySingleton() {
        }
    
        // 其他方法 尽量做成 static
        public static void other(){
    
        }
    }

    优点:

    • 在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁的创建、销毁时,而创建或销毁时性能又无法优化,单例模式的优势就非常明显
    • 只生成一个实例,所以减少了系统性能的开销,当一个对象产生需要比较多的资源时,单例一般不会被JVM回收(需要注意JVM的回收机制)
    • 单例模式可以避免对资源的多重占用
    • 单例模式可以在系统设置全局的访问点,优化共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理

    缺点:

    • 一般没有接口,扩展很困难。
    • 单例模式对测试不利,在并行开发环境中,如果单例模式没有完成,是不能进行测试的
    • 单例模式与单一职责原则有冲突,一个类应该只实现一个逻辑,而不关心它是否是单例的

    需要注意的地方:

      关于线程安全代码(懒汉式单例)

    /**
     * 懒汉式单例
     */
    public class MySingleton {
        private static MySingleton ourInstance = new MySingleton();
    
        // 通过此方法获得对象实例
        public static synchronized MySingleton getInstance() {
            if(ourInstance != null){
                ourInstance = new MySingleton();
            }
            return ourInstance;
        }
    
        // 对外关闭构造方法
        private MySingleton() {
        }
    
        // 其他方法 尽量做成 static
        public static void other(){
    
        }
    }

      

  • 相关阅读:
    MillerRabin
    BM算法总结
    高斯消元处理自由变元的方法
    [IOI2019]矩形区域
    费用流处理负圈的方法
    回文自动机(PAM)总结
    [TJOI2017]龙舟
    luogu P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
    博弈论
    构造
  • 原文地址:https://www.cnblogs.com/banywl/p/7847594.html
Copyright © 2011-2022 走看看