Дизайн паттерндер. 4-сабақ. Құру паттерндері (Creational patterns)
Аты: Singleton
Проблема: Класс объектісін құру ресурстарды (уақыт, жад) көп кетіреді.
Шешім: Бүкіл жүйеге бір ғана класс объектісін құрып, соны қолдану. Басқа класс объектілерінің құрылуын болдырмау. Жалғасы
Singleton құрудың 2 жолы бар: бастапқы класс жадқа қосылған кезде (eager) және сұраныс бойынша класс алғаш шақырылған кезде (lazy)
құру жолдары.
Eager Singleton мысалы
Бірақ көп жағдайларда (базаға байланыс, лог жасау) Lazy Singleton қолданылады. Келесі мысалда класс объектісі алғаш шақырылған кезде ғана құрылады
Қолданылуы:
Нәтиже: Класс объектісінің құрылуын басқаруға және оны шектеуге мүмкіндік береді.
Проблема: Класс объектісін құру ресурстарды (уақыт, жад) көп кетіреді.
Шешім: Бүкіл жүйеге бір ғана класс объектісін құрып, соны қолдану. Басқа класс объектілерінің құрылуын болдырмау. Жалғасы
Singleton құрудың 2 жолы бар: бастапқы класс жадқа қосылған кезде (eager) және сұраныс бойынша класс алғаш шақырылған кезде (lazy)
құру жолдары.
Eager Singleton мысалы
public class EagerInitializedSingleton {
private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
//private constructor клиентке өз объектісін құруға тыйым салады
private EagerInitializedSingleton(){}
public static EagerInitializedSingleton getInstance(){
return instance;
}
}
Бірақ көп жағдайларда (базаға байланыс, лог жасау) Lazy Singleton қолданылады. Келесі мысалда класс объектісі алғаш шақырылған кезде ғана құрылады
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
public static synchronized LazyInitializedSingleton getInstance(){
if(instance == null){
synchronized (LazyInitializedSingleton.class) {
if(instance == null){
instance = new LazyInitializedSingleton();
}
}
}
return instance;
}
}
Қолданылуы:
EagerInitializedSingleton.getInstance();
LazyInitializedSingleton.getInstance();
Нәтиже: Класс объектісінің құрылуын басқаруға және оны шектеуге мүмкіндік береді.
0 пікір