JavaRush /จาวาบล็อก /Random-TH /รูปแบบซิงเกิลตันในคำพูดของคุณเอง
Roman_kh
ระดับ
Харьков

รูปแบบซิงเกิลตันในคำพูดของคุณเอง

เผยแพร่ในกลุ่ม

สวัสดีทุกคน javaRush!

วันนี้จะมาเล่าถึงรูปแบบการออกแบบSingleton(เดี่ยว) ครับ รูปแบบซิงเกิลตันในคำพูดของคุณเอง - 1เป้าหมาย:สร้างคลาสที่จะมีวัตถุเพียงอันเดียว ซึ่งหมายความว่าไม่ว่าจะมีการเข้าถึงกี่ครั้งก็ตาม ออบเจ็กต์เดียวกันกับที่สร้างขึ้นในครั้งแรกจะถูกส่งคืน นี่เป็นสิ่งที่สะดวกและจำเป็นในหลาย ๆ ที่ มันถูกนำไปใช้กับเฟรมเวิร์กไม่ใช่เพื่ออะไร แอปพลิเคชัน:
  • ตัวอย่างเช่น คุณต้องเชื่อมต่อฐานข้อมูลกับโปรเจ็กต์และคลาสที่จะรับผิดชอบในการเชื่อมต่อ การเชื่อมต่อถูกสร้างขึ้นเพียงครั้งเดียวและไม่จำเป็นต้องสร้างการเชื่อมต่อซ้ำแล้วซ้ำอีก
  • Application settings— คลาสที่รับผิดชอบการตั้งค่าการเชื่อมต่อที่จำเป็นสำหรับแอปพลิเคชัน: โฮสต์ฐานข้อมูลและพอร์ต ฯลฯ สร้างขึ้นเพียงครั้งเดียวและใช้ตลอดการทำงานของแอปพลิเคชัน
  • มีตัวอย่างอีกมากมายที่ฉันไม่ได้กล่าวถึง ดังนั้นเขียนตัวเลือกของคุณในความคิดเห็น! =)
หลังจากการแนะนำนี้ ตามที่ฉันเข้าใจ เราสามารถแสดงตัวอย่างของคลาสนี้ได้: (แม้ว่าฉันแน่ใจว่าเราแต่ละคนสามารถคิดการนำสิ่งนี้ไปใช้) นี่คือตัวอย่างที่ง่ายที่สุด เมื่อเราทำให้คอนสตรัคเตอร์เป็นแบบส่วนตัว เช่น คุณไม่สามารถสร้างวัตถุได้อย่างชัดเจน และมีวิธีการคงที่getInstance()ที่ให้วัตถุ
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
มีปัญหากับมัลติเธรด จากนั้นคุณสามารถใส่ เมธอด getInstance()marker synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
ท้ายที่สุดแล้วเช่นเคยฉันอยากจะบอกว่าหากคุณคิดแตกต่างหรือพบข้อผิดพลาดในตัวฉันเขียนความคิดเห็นได้เลย! เราจะพูดคุยทุกอย่างด้วยความยินดี :) หากคุณชอบบทความนี้เขียน "+" แล้วฉันจะรู้ นี่เป็นสิ่งสำคัญสำหรับฉัน :) ป.ล. ฉันกำลังเพิ่มการใช้งานเพิ่มเติม: จากข้อมูลของJoshua Blochนี่เป็นวิธีที่ดีที่สุดในการใช้เทมเพลตEnum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
และต่อไปOn Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+การเริ่มต้นแบบ Lazy +ประสิทธิภาพสูง -ไม่สามารถใช้กับฟิลด์คลาสที่ไม่คงที่ คำถาม/ข้อเสนอแนะใด ๆ - เขียนในความคิดเห็น! ดูบทความอื่น ๆ ของฉันด้วย:
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION