JavaRush /Blog Java /Random-MS /Corak singleton dalam perkataan anda sendiri
Roman_kh
Tahap
Харьков

Corak singleton dalam perkataan anda sendiri

Diterbitkan dalam kumpulan

Hello semua, javaRush!

Hari ini saya akan memberitahu anda tentang corak reka bentuk Singleton(tunggal). Corak singleton dalam perkataan anda sendiri - 1Matlamat: buat kelas yang hanya akan mempunyai SATU objek. Ini bermakna tidak kira berapa kali ia diakses, objek yang sama yang dicipta pada kali pertama akan dikembalikan. Ini adalah perkara yang mudah dan perlu di banyak tempat, bukan sia-sia ia dilaksanakan ke dalam rangka kerja. Permohonan:
  • Sebagai contoh, anda perlu menyambungkan pangkalan data kepada projek dan kelas yang akan bertanggungjawab untuk menyambungkannya. Sambungan dibuat sekali dan tidak perlu menciptanya lagi dan lagi
  • Application settings— kelas yang bertanggungjawab untuk tetapan sambungan yang diperlukan untuk aplikasi: hos pangkalan data dan port, dsb. Ia dicipta sekali dan digunakan sepanjang operasi aplikasi.
  • Terdapat banyak lagi contoh yang saya tidak nyatakan, jadi tulis pilihan anda dalam komen! =)
Selepas pengenalan ini, seperti yang saya faham, kita boleh menunjukkan contoh kelas ini: (Walaupun saya pasti bahawa setiap daripada kita boleh menghasilkan pelaksanaan ini) Berikut adalah contoh paling mudah, apabila kita membuat pembina peribadi, i.e. Anda tidak boleh mencipta objek secara eksplisit. Dan terdapat kaedah statik 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;
  }
}
Terdapat masalah dengan multithreading dan kemudian anda boleh meletakkan kaedah 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 bahawa jika anda berfikir secara berbeza atau mendapati kesilapan saya, tulis dalam komen! Kami akan membincangkan segala-galanya dengan senang hati :) Jika anda menyukai artikel itu, tulis "+" dan saya akan mengetahuinya. Ini penting bagi saya :) PS Saya menambah lebih banyak pelaksanaan: Menurut Joshua Bloch , ini adalah cara terbaik untuk melaksanakan templatEnum 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 malas +Prestasi tinggi -Tidak boleh digunakan untuk medan kelas bukan statik Sebarang soalan/cadangan - tulis dalam komen! Lihat juga artikel saya yang lain:
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION