JavaRush /Java blogi /Random-UZ /O'z so'zlaringiz bilan bitta tonli naqsh
Roman_kh
Daraja
Харьков

O'z so'zlaringiz bilan bitta tonli naqsh

Guruhda nashr etilgan

Hammaga salom, javaRush!

Bugun men sizga dizayn namunasi Singleton(bitta) haqida gapirib beraman. O'z so'zlaringiz bilan yagona naqsh - 1Maqsad: faqat BIR ob'ektga ega bo'lgan sinf yarating. Bu shuni anglatadiki, unga necha marta kirishdan qat'i nazar, birinchi marta yaratilgan bir xil ob'ekt qaytariladi. Bu qulay narsa va ko'p joylarda zarur, bu ramkalarda amalga oshirilayotgani bejiz emas. Ilova:
  • Masalan, ma'lumotlar bazasini loyihaga va unga ulanish uchun javobgar bo'lgan sinfga ulashingiz kerak. Ulanish bir marta yaratiladi va uni qayta-qayta yaratishga hojat yo'q
  • Application settings— ilova uchun zarur boʻlgan ulanish sozlamalari uchun masʼul sinf: maʼlumotlar bazasi xosti va porti va boshqalar. Ular bir marta yaratiladi va dasturning butun faoliyati davomida ishlatiladi.
  • Men aytib o'tmagan yana ko'plab misollar bor, shuning uchun sharhlarda variantlaringizni yozing! =)
Ushbu kirishdan so'ng, men tushunganimdek, siz ushbu sinfning misolini ko'rsatishingiz mumkin: (garchi men har birimiz buni amalga oshirishimiz mumkinligiga ishonchim komil) Mana eng oddiy misol, biz konstruktorni xususiy qilganimizda, ya'ni. Ob'ektni aniq yarata olmaysiz. getInstance()Va ob'ektni ta'minlaydigan statik usul mavjud .
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Multithreading bilan bog'liq muammolar mavjud va keyin siz getInstance()marker usulini qo'yishingiz mumkin synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Oxir-oqibat, odatdagidek shuni aytmoqchimanki, agar siz boshqacha fikrda bo'lsangiz yoki mendan xato topsangiz, sharhlarda yozing! Biz hamma narsani zavq bilan muhokama qilamiz :) Agar sizga maqola yoqqan bo'lsa, "+" yozing va men buni bilib olaman. Bu men uchun muhim :) PS Men ko'proq ilovalar qo'shyapman: Joshua Blochga ko'ra , bu shablonni amalga oshirishning eng yaxshi usuliEnum 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;
   }
}
Va yana 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;
   }
}
+Dangasa ishga tushirish +Yuqori unumdorlik -Statik bo'lmagan sinf maydonlari uchun ishlatib bo'lmaydi Har qanday savol/takliflar - izohlarda yozing! Boshqa maqolalarimni ham ko'ring:
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION