Кіріспе
Бағдарламалық жасақтама үлгісі
Күй үлгісі – бұл мінез-құлқына қарай бағдарламалық жасақтама үлгісі, ол объектінің ішкі күйі өзгерген кезде оның мінез-құлқын өзгертуге мүмкіндік береді. Бұл үлгі шекті күйдегі автоматтары тұжырымдамасына жақын. Күй үлгісі стратегия үлгісі ретінде қарастырылуы мүмкін, ол үлгі интерфейсінде анықталған әдістерді шақыру арқылы стратегияны ауыстыра алады. Күй үлгісі компьютерлік бағдарламалауда бір объектінің ішкі күйіне байланысты әртүрлі мінез-құлқын қамту үшін қолданылады. Бұл объектінің орындалу барысында шартты операторларды қолданбай, мінез-құлқын өзгертудің ыңғайлы тәсілі болуы мүмкін, соның арқасында оны қолдау оңайлатылады.
The state pattern is a behavioral software design pattern that allows an object to alter its behavior when its internal state changes. This pattern is close to the concept of finite state machines. The state pattern can be interpreted as a strategy pattern, which is able to switch a strategy through invocations of methods defined in the pattern's interface. The state pattern is used in computer programming to encapsulate varying behavior for the same object, based on its internal state. This can be a cleaner way for an object to change its behavior at runtime without resorting to conditional statements and thus improve maintainability.
Құрылымы
Бірлескен Модельдеу Тілі (UML) кластық диаграммасында Context класы мемлекетке тән мінез-құлықты тікелей іске асырмайды. Оның орнына, Context мемлекетке тән мінез-құлықты орындау үшін State интерфейсіне сілтеме жасайды (state.handle), бұл Context-ті мемлекетке тән мінез-құлықтың қалай іске асырылғанына тәуелсіз етеді. ConcreteStateA және ConcreteStateB кластары State интерфейсін іске асырады, яғни әрбір мемлекет үшін мемлекетке тән мінез-құлықты іске асырады (қаптайды). UML реттілік диаграммасы орындалу кезіндегі өзара әрекеттесулерді көрсетеді:
Context объектісі мемлекетке тән мінез-құлықты әртүрлі State объектілеріне жүктейді. Біріншіден, Context өзінің ағымдағы (бастапқы) күй объектісіне (ConcreteStateA) handle(this) деп шақыру жасап, ол операцияны орындайды және Context-тің ағымдағы күйін ConcreteStateB-ге өзгерту үшін setState(ConcreteStateB) деп шақырады. Келесі жолы Context қайтадан өзінің ағымдағы күй объектісіне (ConcreteStateB) handle(this) деп шақыру жасап, ол операцияны орындайды және Context-тің ағымдағы күйін ConcreteStateA-ға өзгертеді.