單例模式
什麼是設計模式?
設計模式就是經過前人無數次的實踐總結出的,設計過程中可以反覆使用的、可以解決特定問題的設計方法,
也可以理解爲:
一套被反覆使用,多數人知曉的,經過分類編目的,代碼設計經驗的總結
其目的是:
使用設計模式是爲了可重用代碼,讓代碼更容易被他人理解,保證代碼的可靠性。
首先是餓漢模式:測試代碼如下
package com.example.demo.test2;
/**
* 單例模式
* 應用場合:有些對象只需要一個就夠了,如:老婆,古代的皇帝
* 作用:可以保證整個應用程序中某個實例又且只有一個
* 類型:餓漢模式,懶漢模式
*/
public class Singleton {
//1.將構造方法私有話,不允許外部直接創建多個對象
private Singleton(){
}
//2.創建類的唯一實例 使用private static修飾
private static Singleton instance=new Singleton();
//3.提供一個用於獲取實例的方法,使用public static 修飾
public static Singleton getInstance(){
return instance;
}
}
package com.example.demo.test2;
public class Test {
public static void main(String[] args) {
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2){
System.out.println("S1和S2是同一個實例");
}else{
System.out.println("S1和S2不是同一個實例");
}
}
}
結果如下:
餓漢模式什麼時候加載?
因爲用static修飾了,所以他就是類變量,在加載類的時候加載,所以在Singleton這個類加載的時候,他就會創建一個唯一的實例。
懶漢模式:
package com.example.demo.test2;
/**
* 懶漢模式
*/
public class Singleton2 {
//1.將構造方法私有化,不允許外界直接創建對象
private Singleton2(){
}
//2.聲明類的唯一實例,使用private static修飾 之聲明沒有創建
private static Singleton2 instance;
//3.提供一個用於獲取實例的方法,使用public static修飾
public static Singleton2 getInstance(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
package com.example.demo.test2;
public class Test {
public static void main(String[] args) {
//餓漢模式
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2){
System.out.println("S1和S2是同一個實例");
}else{
System.out.println("S1和S2不是同一個實例");
}
//懶漢模式
Singleton2 s3=Singleton2.getInstance();
Singleton2 s4=Singleton2.getInstance();
if(s3==s4){
System.out.println("S3和S4是同一個實例");
}else{
System.out.println("S3和S4不是同一個實例");
}
}
}
懶漢模式只有在使用的時候才加載
餓漢模式和懶漢模式的區別:
餓漢模式的特點是加載類時比較慢,因爲創建類的時候,他就已經加載了這個類的實例,所以加載有點慢,但是它有一個好處,就是在運行時獲取對象的速度比較快 線程安全
懶漢模式的特點是加載類時比較快,因爲創建類的時候它沒有加載類的實例,所以加載會快一點,但是在運行時,獲取對象的速度比較慢 線程不安全