JavaRush /Java блогу /Random-KY /Singleton үлгүсү өз сөзүңүз менен
Roman_kh
Деңгээл
Харьков

Singleton үлгүсү өз сөзүңүз менен

Группада жарыяланган

Баарына салам, javaRush!

SingletonБүгүн мен дизайн үлгүсү (бирдиктүү) жөнүндө айтып берем . Синглтон үлгүсү өз сөзүңүз менен - ​​1Максат: БИР гана an objectи бар класс түзүңүз. Бул ага канча жолу кирбесин, биринчи жолу түзүлгөн an object кайра кайтарылат дегенди билдирет. Бул ыңгайлуу нерсе жана көп жерлерде зарыл, ал негиздерге киргизorп жатканы бекеринен эмес. Колдонмо:
  • Мисалы, маалымат базасын долбоорго жана ага туташуу үчүн жооп бере турган класска туташтыруу керек. Байланыш бир жолу түзүлөт жана аны кайра-кайра түзүүнүн кереги жок
  • Application settings— тиркеме үчүн зарыл болгон байланыш орнотуулары үчүн жооптуу класс: маалымат базасы хосту жана порт, ж.б. Алар бир жолу түзүлүп, колдонмонун бүтүндөй иштешинде колдонулат.
  • Мен айтпаган дагы көптөгөн мисалдар бар, андыктан варианттарыңызды комментарийге жазыңыз! =)
Бул кириш сөздөн кийин, мен түшүнгөндөй, бул класстын мисалын көрсөтсө болот: (Бирок мен ар бирибиз муну ишке ашыра алабыз деп ишенем) Мына эң жөнөкөй мисал, биз конструкторду купуя кылып жатканда, б.а. Сиз an objectти ачык түзө албайсыз. getInstance()Жана an objectти камсыз кылган статикалык ыкма бар .
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;
  }
}
Акырында, адаттагыдай эле, башкача ойлосоңуз же менден ката тапсаңыз, комментарийге жазыңыз! Биз бардыгын ырахат менен талкуулайбыз :) Эгер макала сизге жакса, "+" жазыңыз, мен аны билем. Бул мен үчүн маанилүү :)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;
   }
}
+Жалкоо инициализация +Жогорку өндүрүмдүүлүк -Статикалык эмес класс талаалары үчүн колдонулbyte Ар кандай суроолор/сунуштар - комментарийге жазыңыз! Менин башка макалаларымды да караңыз:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION