码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2017-11-17 01:52:47      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:一个   get   懒汉式   创建   构造   避免   测试的   频繁   new   

单例模式定义:

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

创建过程:

/**
 * 标准的单例模式代码结构
 */
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(){

    }
}

 

  

 

单例模式

标签:一个   get   懒汉式   创建   构造   避免   测试的   频繁   new   

原文地址:http://www.cnblogs.com/banywl/p/7847594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!