JavaRush /Java блогы /Random-KK /Өз сөзіңізбен синглтон үлгісі
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()маркер әдісін қоюға болады synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Соңында, әдеттегідей, басқаша ойласаңыз немесе менің бойымнан қате тапсаңыз, коментке жазыңыз дегім келеді! Біз бәрін қуана талқылаймыз :) Егер сізге мақала ұнаса, «+» деп жазыңыз, мен оны білемін. Бұл мен үшін маңызды :) PS Мен қосымша енгізулерді қосып жатырмын: Джошуа Блоктың айтуынша , бұл үлгіні енгізудің ең жақсы жолы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;
   }
}
+Жалқау инициализация +Жоғары өнімділік -Статикалық емес сынып өрістері үшін пайдаланылмайды Кез келген сұрақтар/ұсыныстар - түсініктемелерде жазыңыз! Менің басқа мақалаларымды да қараңыз:
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION