單例模式和多例模式說明:
1. 單例模式和多例模式屬于對象模式。
2. 單例模式的對象在整個系統(tǒng)中只有一份,多例模式可以有多個實(shí)例。
3. 它們都不對外提供構(gòu)造方法,即構(gòu)造方法都為私有。
為什么用單例、多例:
之所以用單例,是因?yàn)闆]必要每個請求都新建一個對象,這樣子既浪費(fèi)CPU又浪費(fèi)內(nèi)存;
之所以用多例,是為了防止并發(fā)問題;即一個請求改變了對象的狀態(tài),此時對象又處理另一個請求,而之前請求對對象狀態(tài)的改變導(dǎo)致了對象對另一個請求做了錯誤的處理;
用單例和多例的標(biāo)準(zhǔn)只有一個:
當(dāng)對象含有可改變的狀態(tài)時(更精確的說就是在實(shí)際應(yīng)用中該狀態(tài)會改變),則多例,否則單例;
這里舉個例子:
public class Sex {
private static Sex manSex = new Sex("Man");
private static Sex womenSex = new Sex("Women");
private String title;
private Sex(String s_title)
{
title = s_title;
}
public static Sex getInstance(int num)
{
switch(num){case ChoiseSex.MAN :
return manSex;
default :
return womenSex;
}}
public String getTitle() {
return title;
}
interface ChoiseSex {
int MAN = 1; int WOMEN = 2; }
}
public class SexTest {
public static void main(String[] args)
{
Sex s_man = Sex.getInstance(Sex.ChoiseSex.MAN);
System.out.println(s_man.getTitle());
System.out.println("===============================================");
Sex s_women = Sex.getInstance(Sex.ChoiseSex.WOMEN);
System.out.println(s_women.getTitle());
}
}
運(yùn)行結(jié)果:
