设计模式之单例模式

基本概念

单例模式是一种生产对象型的设计模式。

单例模式指的是某个类的对象在同一时间只允许存在1个实例(对象)。

实现

假设存在类King:

public class King {
}

普通的类可以随意的创建对象:

King k1 = new King();
King k2 = new King();
King k3 = new King();

因为当创建一个类,并且没有显式的指定构造方法时,等效于:

public class King {
    public King() {
    }
}

要实现单例模式,首先,就必须不允许随意创建对象!则:

public class King {
    private King() {
    }
}

一旦将构造方法私有化,则在类的外部是不允许调用构造方法的!此时,只有类的内部才可以调用构造方法创建对象:

public class King {
    private King king = new King();

    private King() {
    }
}

在以上代码中,创建的king对象就是唯一被创建出来的对象!那么,当类的外部需要时,提供匹配的get方法即可!

public class King {
    private King k = new King();

    private King() {
    }

    public King getInstance() {
        return k;
    }
}

虽然以上代码看似可行,但是,实际使用时,getInstance()方法是无法被调用的!为了保证在没有King类的对象之前就可以调用getInstance()方法,必须使用static进行修饰:

public class King {
    private King k = new King();

    private King() {
    }

    public static King getInstance() {
        return k;
    }
}

由于被static修饰的成员,只能访问其它static成员(不可以访问其它非static成员),因为一旦使用static后,该成员将会最优先加载到内存中!而其它没有被static修饰的数据此时还没有加载到内存中,所以不可以访问!最终,还需要使用static修饰King的对象:

public class King {
    private static King k = new King();

    private King() {
    }

    public static King getInstance() {
        return k;
    }
}



懒汉式单利模式:

  按需求初始化,在需要的时候创建单利对象的实例,好处是如果不适用对象就不占用内存和处理器资源,适用于对象消耗内存大、频率小的情况。

     Public final class Boy{

          private static Boy instance;

         public static synchronized  Boy getInstance(){

            if(instance==null){

                Thread.sleep(1000);

                instance = new Boy();

           }

               return instance;

        }

 private Boy(){}

  }




 

posted on 2018-06-12 21:53  积跬步---买房买车  阅读(107)  评论(0)    收藏  举报