1:单例模式:

保证一个类中仅仅有一个实例。并提供一个訪问它的实例的方法。

最牛逼的单例模式是双重检验:(在加同步锁的前后两次推断实例是否已经存在!

)

class Singleton{
  private Singleton(){};  //私有方法
  private static Singleton instance=null; //将类的实例定义为静态的
  public Singleton getInstanSingleton(){
  if(instance==null){        //由于同步是费时间的,所以先推断是否为空,再同步
   synchronized (Singleton.class) {  //同步的是Singleton的class对象;
    if(instance==null){        //由于前面同步的原因,多线程下有可能其它的线程已经创建了实例,所以这个时候还必须再次推断!

instance=new Singleton(); } } } return instance; } }


2:利用静态块来进行单例模式的创建。


public class SingleTon {

    private SingleTon() {
    };

    private static SingleTon singleTon;

    //由于静态初始化块仅仅会载入一次。
    static {
        singleTon = new SingleTon();
    }

    public static SingleTon getInstance() {
        return singleTon;
    }

}

创建实例的过程是在第一次调用SingleTon这个类的时候就创建了。并非调用getInstance()方法创建的。所以利用该方法也会存在创建实例过早的问题。

从而减低内存的使用效率。




java源代码举例:
Runtime.getRuntime(); 返回与当前 Java 应用程序相关的执行时对象。
Calendar.getInstance();获取当前环境下的一个日历。
应用场合是在:资源管理的时候,比方说:windows的回收站,仅有一个。