-
Notifications
You must be signed in to change notification settings - Fork 0
state
جز الگوهای رفتاری یا Behavioarl بوده و براساس حوزه، در دسته object قرار گرفته است.
این الگو کاری میکند که ارتباطات بین کلاسها و موجودیت ها کنترل شود و میتوان آن را نسخه پویا و داینامیک الگوی strategy دانست. رفتار این الگو به این شکل است که وقتی حالت داخلی یک شی تغییر میکند، با توجه به آن تغییر، برنامه رفتار خود را تغییر میدهد و این طور به نظر می رسد که شی، کلاس خود را تغییر داده است. این تغییر با فراخوانی حالت های از پیش تعریف شده درون الگو اتفاق می افتد.

الگو طراحی state ارتباط نزدیکی با Finite-state_machine

state machin معمولاً با تعداد زیادی عبارات شرطی (if یا switch) پیادهسازی میشوند که بسته به وضعیت فعلی شی، رفتار مناسب را انتخاب میکنند.

الگو state پیشنهاد میکند کلاسهای متفاوت برای تمامی حالتها ایجاد کنید و رفتارهای خاص حالت را را در این کلاسها استخراج کنیم.

Interface State :
این رابط کاربری برای متدهایی است که در هر کلاسِ state پیاده سازی میشوند.
State :
یک حالت از پیاده سازی متدهایی میباشد که در interface اعلام شده است. به ازای هر state یک کلاس خواهیم داشت.
Context :
به یک state خاص اشاره میکند. و از طریق interface مربوط به state با شی state ارتباط برقرار میکند.
Concrete States :
کلاسهایی هستند که حالت های خاص خود را از متدهایی که در interface اعلام شده است، پیاده سازی میکنند و در Context بر اساس شرایط مختلف، یکی از این کلاسهای Concrete States اجرا خواهد شد.
- پیاده سازی ابزارهای گرافیکی.
- اشیائی که با توجه به موقعیت فعلی ، رفتار کنند و در زمان اجرا تغییر کنند.
- نگامی که تعداد کدهای تکراری در حالت های مشابه زیاد شوند و انتقال state ها مبتنی بر شرایط باشد.
- Single Responsibility
- حالت های جدید، بدون تغییر در کلاس های موجود معرفی میشوند
- اگر یک ماشین state فقط چند حالت داشته باشد یا به ندرت تغییر کند، استفاده از الگوی state باعث پیچیدگی بیشتر میشود.