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(){
    
        }
    }

      

  • 相关阅读:
    【python-leetcode142-快慢指针】环形链表2
    SpringMvc 拦截器
    什么是RESTful?RESTfule风格
    Http协议
    SpringMVC Mock测试
    Oracle 创建用户,赋予指定表名/视图只读权限
    添加junit和spring-test还是用不了@Test和@RunWith(SpringJUnit4ClassRunner.class)注解
    SpringMVC 数据交互
    SpringMvc commons-fileupload图片/文件上传
    SpringMvc 异常处理器
  • 原文地址:https://www.cnblogs.com/banywl/p/7847594.html
Copyright © 2011-2022 走看看