單例模式是一種建立型模式。
單例模式有幾個要點:
1)必須確保只存在乙個類的例項。
2)類必須自己建立自己,不允許其他類來建立自己。
3)必須提供乙個方法允許其他類訪問單例成員。
由此可知:構造方法必須是私有的,然後需要乙個公有的靜態方法獲取單例例項 。
1、懶漢式
//懶漢式單例類.在第一次呼叫的時候例項化自己
public class singleton
private static singleton single=null;
//靜態工廠方法
public static singleton getinstance()
return single;
} }
單例例項在第一次呼叫的時候才建立,符合懶載入的要求。缺點是:不支援多執行緒,在多執行緒環境下可能會建立多個物件。
改進方式:
1)在getinstance方法上加同步
public static synchronized singleton getinstance()
return single;
}
這種實現方式簡單,但效能上有缺陷,由於直接在方法上加了鎖,所以如果同時有兩個地方獲取單例物件,其中乙個就會阻塞。在獲取單例的次數獲取比較多的時候效能很差。
2)雙重檢查鎖定
public static singleton getinstance()
}
}
return singleton;
}
這種方式比較複雜,但是其他方面都很好:既實現了懶載入,同時也是執行緒安全的,效能還不錯。
3)靜態內部類
public class singleton
private singleton (){}
public static final singleton getinstance()
}
這種方式和雙檢鎖方式的效果類似,既可以保證懶載入又具有多執行緒下的效能優勢。而且實現起來更加簡單。
2、餓漢式
//餓漢式單例類.在類初始化時,已經自行例項化
public class singleton1
private static final singleton1 single = new singleton1();
//靜態工廠方法
public static singleton1 getinstance()
}
在第一次載入類的時候,會初始化類的靜態域,並確保靜態域只初始化一次,缺點是載入類的時候就建立了單例物件,沒有懶載入。
3、列舉方式
public enum enumsingleton
public string getdata()
}
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...