這幾天想開始整理我這業餘水平的java知識,今天就先總結下我所瞭解到的單例模式吧。
單例模式我在這裏介紹的就三種:餓漢模式、懶漢模式、靜態內部類模式。
餓漢模式:
public class SingleTon{
//第一步,將類的構造方法私有化
private SingleTon(){}
//第二步,定義一個類的實例
private static SingleTon instance = new SingleTon();
//第三步,定義個方法向外界提供類的實例
public static SingleTon getInstance(){
return instance;
}
}
懶漢模式:
public class SingleTon{
//第一步,將類的構造方法私有化
private SingleTon(){}
//第二步,聲明一個類的實例
private static SingleTon instance;
//第三步,定義個方法向外界提供類的實例
public static SingleTon getInstance(){
if(istance==null){
instance = new SingleTon();
return instance;
}else{
return instance;
}
}
}
靜態內部類模式:
public class SingleTon{
//第一步,將類的構造方法私有化
private SingleTon(){}
//第二步,定義一個內部類,並在其中定義一個成員變量爲外部類的實例
static class InnerClass{
private static SingleTon instance = new SingleTon();
}
//第三步,向外界提供一個獲取實例的方法
public static SingleTon getInstance(){
return InnerClass.instance;
}
}
我簡單總結幾點如下:
1. 餓漢模式和懶漢模式的區別就是:餓漢模式是在聲明類的實例的時候就進行了賦值,即已經new了一個實例並付給了instance;而懶漢模式是在向外界提供實例的時候才進行判斷,如果沒有進行過賦值處理則new一個實例instance並返回,如果賦值過了則直接返回該實例。
2. 餓漢模式是在類加載的時候相比較懶漢模式慢一些,但是在使用類的時候要快;而懶漢模式是在類加載時候相對快一些,而在使用類的時候慢於餓漢模式。
3. 靜態內部類模式就是把向外界提供的那個外部類的唯一實例放在靜態內部類中,作爲其靜態的成員變量,並且由外部類的靜態方法向外界提供。