ฉันเชื่อว่าทุกคนคุ้นเคยกับโมเดลซิงเกิลตันอยู่แล้วและวิธีการใช้งานมักจะแบ่งออกเป็นสองประเภทต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
// การใช้งานขี้เกียจ
Singleton ชั้นเรียนสาธารณะ {
อินสแตนซ์แบบสแตติกส่วนตัว = NULL;
Private Singleton () {}
สาธารณะคงที่ newinstance () {
ถ้า (null == อินสแตนซ์) {
อินสแตนซ์ = ใหม่ singleton ();
-
อินสแตนซ์กลับ;
-
โมฆะสาธารณะ Dosomething () {
// ทำอะไร ...
-
-
// สไตล์จีนที่หิวโหย
Singleton ชั้นเรียนสาธารณะ {
อินสแตนซ์แบบสแตติกส่วนตัว = ใหม่ซิงเกิล ();
Private Singleton () {}
Singleton Static Public Newinstance () {
อินสแตนซ์กลับ;
-
โมฆะสาธารณะ Dosomething () {
// ทำอะไร ...
-
-
ในการใช้โหมดดอกเบี้ยเดี่ยวสไตล์ขี้เกียจและหิวมีสถานการณ์แอปพลิเคชันที่แตกต่างกัน ในการใช้งาน
ในสองโหมดข้างต้นหากคุณเป็นมัลติเธรดจะไม่มีปัญหากับสไตล์ Hungry Man เพราะ JVM จะโหลดคลาสที่น่าสนใจเพียงครั้งเดียว แต่สไตล์ผู้ชายขี้เกียจอาจมีปัญหาในการสร้างความสนใจเพียงครั้งเดียวซ้ำ ๆ วัตถุซึ่งก็คือเธรดไม่ปลอดภัย
ดังนั้นมีวิธีที่จะทำให้โหมดดอกเบี้ยเดี่ยวของความปลอดภัยแบบด้ายที่หิวโหยหรือไม่? มีคำตอบใด ๆ ในหลายกรณี JVM ได้ให้การควบคุมการซิงโครไนซ์แก่เราเช่น:
.
b
เมื่อ JVM กำลังโหลดคลาสมันจะทำให้แน่ใจว่าข้อมูลจะถูกซิงโครไนซ์
ใช้คลาสภายในระดับคลาสเพื่อสร้างอินสแตนซ์วัตถุในคลาสภายในนี้ ด้วยวิธีนี้ตราบใดที่คุณไม่ได้ใช้คลาสภายในชั้นเรียนคุณจะไม่สร้างอินสแตนซ์ของวัตถุดังนั้นจึงได้รับการโหลดขี้เกียจขี้เกียจและความปลอดภัยของด้าย
การคัดลอกรหัสมีดังนี้:
Singleton ชั้นเรียนสาธารณะ {
// คลาสชั้นในวัตถุที่น่าสนใจอย่างง่ายจะถูกสร้างขึ้นเฉพาะเมื่อโหลดคลาสด้านใน
ชั้นเรียนแบบคงที่ส่วนตัวแบบสแตติก {
อินสแตนซ์สแตติกสาธารณะสาธารณะ = ใหม่ซิงเกิล ();
-
Private Singleton () {}
Singleton Static Public Newinstance () {
คืน Singletonholder.instance;
-
โมฆะสาธารณะ Dosomething () {
// ทำอะไรบางอย่าง
-
-
สิ่งนี้สามารถตระหนักถึงโมเดลราคาเดียวที่ปลอดภัยของเธรด
นอกจากนี้เรายังสามารถใช้โหมดดอกเบี้ยเดียวผ่านประเภทการแจงนับซึ่งเป็นวิธีที่แนะนำมากขึ้น
การใช้รูปแบบ Singleton โดยใช้ประเภท enum มีดังนี้:
การคัดลอกรหัสมีดังนี้:
Public Enum Singleton {
// กำหนดองค์ประกอบที่แจกแจงมันเป็นอินสแตนซ์ของซิงเกิลตัน
ตัวอย่าง;
โมฆะสาธารณะ Dosomething () {
// ทำอะไร ...
-
-
ตกลงโหมด Singleton เปิดตัวที่นี่