JavaRush /Java Blogu /Random-AZ /Öz sözlərinizlə tək tonlu naxış
Roman_kh
Səviyyə
Харьков

Öz sözlərinizlə tək tonlu naxış

Qrupda dərc edilmişdir

Hamıya salam, javaRush!

SingletonBu gün sizə dizayn nümunəsi (tək) haqqında danışacağam . Öz sözlərinizlə tək tonlu naxış - 1Məqsəd: yalnız BİR obyekti olan bir sinif yaradın. Bu o deməkdir ki, ona neçə dəfə daxil olunsa da, ilk dəfə yaradılan eyni obyekt geri qaytarılacaq. Bu, rahat bir şeydir və bir çox yerlərdə zəruridir, bunun çərçivələrə salınması boş yerə deyil. Ərizə:
  • Məsələn, verilənlər bazasını layihəyə və ona qoşulmağa cavabdeh olacaq sinfə qoşmaq lazımdır. Bağlantı bir dəfə yaradılır və onu təkrar-təkrar yaratmağa ehtiyac yoxdur
  • Application settings— proqram üçün lazım olan əlaqə parametrlərinə cavabdeh olan sinif: verilənlər bazası host və port və s. Onlar bir dəfə yaradılır və proqramın bütün fəaliyyəti ərzində istifadə olunur.
  • Qeyd etmədiyim daha çox nümunə var, ona görə də seçimlərinizi şərhlərdə yazın! =)
Bu girişdən sonra, başa düşdüyüm kimi, bu sinfə aid bir nümunə göstərə bilərik: (Baxmayaraq ki, hər birimiz bunun həyata keçirilməsini tapa biləcəyimizə əminəm) Budur ən sadə nümunə, konstruktoru özəl etdikdə, yəni. Siz açıq şəkildə obyekt yarada bilməzsiniz. getInstance()Və obyekti təmin edən statik metod var .
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Çox iş parçacığı ilə bağlı problemlər var və sonra getInstance()marker metodunu qoya bilərsiniz synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Sonda hər zamankı kimi demək istəyirəm ki, əgər siz başqa cür düşünürsünüzsə və ya məndə səhv tapırsınızsa, şərhlərdə yazın! Hər şeyi məmnuniyyətlə müzakirə edəcəyik :) Məqaləni bəyəndinizsə, “+” yazın, mən də biləcəyəm. Bu mənim üçün vacibdir :) PS Daha çox tətbiqlər əlavə edirəm: Joshua Bloch- a görə , şablonu həyata keçirməyin ən yaxşı yolu budurEnum 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;
   }
}
Və daha çox 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;
   }
}
+Tənbəl başlatma +Yüksək performans -Statik olmayan sinif sahələri üçün istifadə edilə bilməz Hər hansı bir sualınız/təklifiniz - şərhlərdə yazın! Digər məqalələrimə də baxın:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION