1 單例模式

2021-07-04 14:49:01 字數 1528 閱讀 3147

乙個類只能有乙個例項。比如印表機這種東西。

trick在於:變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance()方法&其他被public修飾的方法。getinstance()方法記得用public修飾。

原理:

public class singleton 

public static singleton getinstance()

return uniqueinstance;

}}

例子:

public class chocolatefactory 

public static chocolatefactory getinstance()

return uniqueinstance;

}public void fill()

}public void boil()

}public void pour()

}}

bug:多執行緒不安全。 

解決辦法(優化): 

vs1:放乙個同步鎖(乙個執行緒執行完後,另乙個執行緒才可以呼叫),但是比較耗資源。

public class chocolatefactory 

//1、加入乙個synchronized關鍵字

public static synchronized chocolatefactory getinstance()

return uniqueinstance;

}public void fill()

}public void boil()

}public void pour()

}}

vs2:急切建立例項,但是也有點耗資源。

public class chocolatefactory 

public static chocolatefactory getinstance()

return uniqueinstance;

}public void fill()

}public void boil()

}public void pour()

}}

vs3:雙重檢查加鎖。

public class chocolatefactory 

public static chocolatefactory getinstance()

}

}return uniqueinstance;

}public void fill()

}public void boil()

}public void pour()

}}

有乙個方法,適用於看**是否應該使用當前這種設計模式: 

要在原來**基礎上,多加乙個什麼功能或什麼改動時,改動會複雜嗎?如果會變複雜,則考慮採用其他的設計模式。

1 單例模式

某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...

單例模式1

1 餓漢式 author version 0.1 單例模式 餓漢式 建立時進行例項化 1 私有化構造方法 2 建立私有例項 static 3 建立公共類方法 static 方法輸出單例 public class singleton5 公共方法 public static singleton5 get...

1,單例模式

1,單例模式 1 單例模式是什麼?2 為什麼要使用單例模式?3 怎樣使用單例模式?4 單例模式的應用場景 第一,單例模式是什麼?單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控...