首页 > 其他 > 详细

单例模式

时间:2014-08-01 12:58:41      阅读:235      评论:0      收藏:0      [点我收藏+]

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

主要优点:

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;

  }
}

 

单例模式,布布扣,bubuko.com

单例模式

原文:http://www.cnblogs.com/zhaojinhui/p/3884340.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!