先声明,我只是做个笔记,通过看《研磨设计模式》一书中的“单例模式”,而自己再复述一遍:

    单例:实际上就是使某类,在全局上,只有一个实例,只允许提供给外界一个全局的访问点。而本质上,单例模式,就是控制类的实例的数目。当遇到要使某类有固定数目的实例时,这便是多例模式,而实现原理,则跟单例差不多,不过是多了一个变量,来控制数目,多了一个集合,来存储对象。

   说完费话,进正题吧:

一,要使一个类,不能被随便实例化,就必须从它的构造方法入手。从访问修饰符,我们知道,将构造方法设置成private类型就行了。

二,将构造方法设置成私有,那么,该类的成员,则必须有一个能提供该类实例的方法。一般我们命名为: getInstance(); 

(1)且看如下代码:

 public class Singleton {

      public  static Singleton single;

      //--第一步,私有化构造方法--

    private Singleton(){}

     //--第二步,声明获取该类实例的方法--

     public static Singleton getInstance(){

     if(null == single){

     single = new Singleton();

}

      return single;

}

}

//-----到这里,我们这个类,能够很好的满足非多线程环境下的单例。

当然,我们可以利用JVM加载类时的顺序,当其在加载类的成员变量时,就进行对象的创建。

(2)且看如下代码:

  public class Singleton{

    public static Singleton single = new Singleton(); //--第二步,创建一个单例类的实例

   //--同样,第一步,私有化构造方法--

   private Singleton(){}

  public static Singleton getInstance(){

   return single;

}

}

//---而此类,则能够满足在多线程环境下的单例,因为,JVM在加载类的时候,默认就是采取同步的形式。

注:更多精彩,请待续.....(重点是不耐烦一口写完)