Skip to content
Seyed Mahdi Hosseini edited this page Aug 1, 2022 · 13 revisions

الگو طراحی state

جز الگوهای رفتاری یا Behavioarl بوده و براساس حوزه، در دسته object قرار گرفته است.

این الگو کاری می‌کند که ارتباطات بین کلاس‌ها و موجودیت ها کنترل شود و می‌توان آن را نسخه پویا و داینامیک الگوی strategy دانست. رفتار این الگو به این شکل است که وقتی حالت داخلی یک شی تغییر می‌کند، با توجه به آن تغییر، برنامه رفتار خود را تغییر می‌دهد و این طور به نظر می ­رسد که شی، کلاس خود را تغییر داده است. این تغییر با فراخوانی حالت های از پیش تعریف شده درون الگو اتفاق می ­افتد.








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





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

image




راه حل


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









Interface State : این رابط کاربری برای متدهایی است که در هر کلاسِ state پیاده سازی می­شوند.

State : یک حالت از پیاده سازی متدهایی می‌باشد که در interface اعلام شده است. به ازای هر state یک کلاس خواهیم داشت.

Context : به یک state خاص اشاره می‌کند. و از طریق interface مربوط به state با شی state ارتباط برقرار می‌کند.

Concrete States : کلاس‌هایی هستند که حالت های خاص خود را از متدهایی که در interface اعلام شده است، پیاده سازی می‌کنند و در Context بر اساس شرایط مختلف، یکی از این کلاس‌های Concrete States اجرا خواهد شد.




شرایط استفاده از الگوی طراحی State

  • پیاده سازی ابزارهای گرافیکی.
  • اشیائی که با توجه به موقعیت فعلی ، رفتار کنند و در زمان اجرا تغییر کنند.
  • نگامی که تعداد کدهای تکراری در حالت های مشابه زیاد شوند و انتقال state ها مبتنی بر شرایط باشد.



مزایا

  • Single Responsibility
  • حالت های جدید، بدون تغییر در کلاس های موجود معرفی میشوند



معایب

  • اگر یک ماشین state فقط چند حالت داشته باشد یا به ندرت تغییر کند، استفاده از الگوی state باعث پیچیدگی بیشتر می­شود.



مثال

Is necessary

Design Pattern

Creational

Structural

Behavioral

Template

Clone this wiki locally