设计模式中单例模式的介绍

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

首先我们来写一个简单的单例类:

public class SingleClass{

  //私有静态化实例,防止被引用。

  private static  SingleClass singleClass = null;

  //私有化构造器,防止被实例化

  private SingleClass(){

  }

  //静态工程方法,创建实例

  public static SingleClass getInstance(){

    if(singleClass == null){

      return new SingleClass();

    }else{

      return singleClass;

    }

    

  }

}

这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了,如何解决?我们首先会想到对getInstance方法加synchronized关键字,如下:

public static synchronized SingleClass getInstance(){

    if(singleClass == null){

      return new SingleClass();

    }else{

      return singleClass;

    }

  }

当然上面所讲可以称之为懒汉式,现在再给大家说一下饿汉式的区别;

 

public class SingleClass{

  //私有静态化实例,防止被引用。

  private static  SingleClass singleClass = new SingleClass();

  //私有化构造器,防止被实例化

  private SingleClass(){

  }

  //静态工程方法,创建实例

  public static SingleClass getInstance(){

    if(singleClass == null){

      return new SingleClass();

    }else{

      return singleClass;

    }

  }

}

饿汉式在类加载的时候就已经实例化,而懒汉式属于用到的时候再去实例化;

 

posted on 2016-08-23 12:21  罗苏  阅读(170)  评论(0编辑  收藏  举报