單例模式的測試資料

2021-06-14 22:20:05 字數 2855 閱讀 1581

我用debug模式測試了兩種單例模式的執**況:

第一種:

public class testsingleton1 

public static synchronized testsingleton1 getinstance()

return singleton1;

}}

第二種:

public class testsingleton2 

public static testsingleton2 getinstance()

}

測試程式:

public class testmain 

}

測試結果:

*****testsingleton1 wrong test*****

constructor methord...

false 1762502123

constructor methord...

false 1193334315

get instance methord...

constructor methord...

false 15735326

*****testsingleton1 right test*****

get instance methord...

false 15735326

get instance methord...

false 15735326

*****testsingleton2 wrong test*****

constructor methord...

constructor methord...

false 1063563420

constructor methord...

false 130672250

get instance methord...

false 141106670

*****testsingleton2 right test*****

get instance methord...

false 141106670

get instance methord...

false 141106670

結果分析:

1.直接使用new,會產生新物件。

2.通過class***.getinstance,只會找到存在的物件,不存在才會new。

關於第一種的測試情況:

1.      private static testsingleton1 singleton1 = null;

1.1. public testsingleton1()

2. public testsingleton1()

3.1. public static synchronized testsingleton1 getinstance()

return singleton1;

}3.2. public testsingleton1()

4. public static synchronized testsingleton1 getinstance()

return singleton1;

}5. public static synchronized testsingleton1 getinstance()

return singleton1;

}

關於第二種的測試情況:

6.1.    private static testsingleton2 singleton2 = new testsingleton2();

6.2. public testsingleton2()

7. public testsingleton2()

8. public testsingleton2()

9. public static testsingleton2 getinstance()

10. public static testsingleton2 getinstance()

如果把wrong test都遮蔽掉,則得到如下結果:

*****testsingleton1 wrong test*****

*****testsingleton1 right test*****

get instance methord...

constructor methord...

false 148669801

get instance methord...

false 148669801

*****testsingleton2 wrong test*****

*****testsingleton2 right test*****

constructor methord...

get instance methord...

false 1690552137

get instance methord...

false 1690552137

驗證不存在才去new的情況

但!是!要!注!意!

真正的單例模式的建構函式用private宣告,而不是上面的public,我測試才用public。

構造測試資料 對比測試資料

正確 include using namespace std typedef long long ll const int max n 1e6 10 intmain return0 author max n date 2019 10 04 15.03.21 description 正確 錯誤 inc...

單例模式 單例類 Singleton 內含測試類

單例類 singleton public class singleton public void setname string name 1.餓漢式 建立乙個靜態私有物件 private final static singleton instance new singleton 私有化構造方法 pr...

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...