JavaRush /Java Blog /Random-ID /Pola tunggal dengan kata-kata Anda sendiri
Roman_kh
Level 33
Харьков

Pola tunggal dengan kata-kata Anda sendiri

Dipublikasikan di grup Random-ID

Halo semuanya, javaRush!

Hari ini saya akan bercerita tentang pola desain Singleton(tunggal). Pola tunggal dengan kata-kata Anda sendiri - 1Sasaran: membuat kelas yang hanya memiliki SATU objek. Artinya berapa kali pun diakses, objek yang sama yang dibuat pertama kali akan dikembalikan. Ini adalah hal yang nyaman dan diperlukan di banyak tempat, dan bukan tanpa alasan hal ini diterapkan ke dalam kerangka kerja. Aplikasi:
  • Misalnya, Anda perlu menyambungkan database ke suatu proyek dan kelas yang akan bertanggung jawab untuk menyambungkannya. Koneksi dibuat satu kali dan tidak perlu membuatnya lagi dan lagi
  • Application settings— kelas yang bertanggung jawab atas pengaturan koneksi yang diperlukan untuk aplikasi: host dan port database, dll. Mereka dibuat satu kali dan digunakan sepanjang operasi aplikasi.
  • Masih banyak lagi contoh yang belum saya sebutkan, jadi tulis pilihanmu di kolom komentar! =)
Setelah pengenalan ini, sejauh yang saya pahami, kita dapat menunjukkan contoh kelas ini: (Meskipun saya yakin kita masing-masing dapat membuat implementasinya) Berikut adalah contoh paling sederhana, ketika kita membuat konstruktor menjadi pribadi, yaitu. Anda tidak dapat membuat objek secara eksplisit. Dan ada metode statis getInstance()yang menyediakan objek.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Ada masalah dengan multithreading dan kemudian Anda dapat meletakkan metode getInstance()penanda synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Pada akhirnya, seperti biasa, saya ingin mengatakan bahwa jika Anda berpikir berbeda atau menemukan kesalahan dalam diri saya, tulis di komentar! Kami akan mendiskusikan semuanya dengan senang hati :) Jika Anda menyukai artikel ini, tulis “+” dan saya akan mengetahuinya. Ini penting bagi saya :) PS Saya menambahkan lebih banyak implementasi: Menurut Joshua Bloch , ini adalah cara terbaik untuk mengimplementasikan templateEnum 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;
   }
}
Dan selanjutnya 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;
   }
}
+Inisialisasi lambat +Kinerja tinggi -Tidak dapat digunakan untuk bidang kelas non-statis Ada pertanyaan/saran - tulis di komentar! Lihat juga artikel saya yang lain:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION