保證一個類有且僅有一個實例,或者說只能被實例化一次。並提供它的全局訪問點。
單例模式有什麼用:
其實單例的作用在於避免產生太多實例,也就是不用new那麼多次,new一次就佔用一次內存的資源,new多了電腦也會慢的。實際開發中簡單的例子就是網站的“在線人數計數器” ,銀行取款。windows操作系統的垃圾回收和設備管理器的打開;
適用場景: 1.需要生成唯一序列的環境
2.需要頻繁實例化然後銷燬的對象。
3.創建對象時耗時過多或者耗資源過多,但又經常用到的對象。
4.方便資源相互通信的環境
優點:1.實現了對唯一實例訪問的可控
2.對於一些需要頻繁創建和銷燬的對象來說可以提高系統的性能。
寫法上:
1、私有的實例化,不對外公開,除了通過Instance(),再沒有入口;
下面我們寫一個例子;
單例類:
public class Singleton{
private static Singleton sing;
private int money=100;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void addMoney(int mon){
money+=mon;
}
public void withdrawl(int mon){
money-=mon;
}
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(sing==null){//如果對象沒有實例化,則實例化
System.out.println("實例化");
sing=new Singleton();
return sing;
}else{
System.out.println("對象已存在,不用實例化");
return sing;
}
}
}
調用類:
public class SingletonTest {
public static void main(String[] args) {
Singleton.getInstance().addMoney(10);
Singleton.getInstance().withdrawl(80);
int money=Singleton.getInstance().getMoney();
System.out.println("目前的錢是:"+money);
}
}