单例模式

单例模式定义:

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

创建过程:

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

    }
}

 

  

 

posted @ 2017-11-17 00:27  半雨微凉  阅读(123)  评论(0编辑  收藏  举报