الگوی حالت (طراحی نرم‌افزار)

الگوی طراحی حالت یک الگوی رفتاری در طراحی نرم‌افزار بوده که به یک شی این اجازه را میدهد تا رفتار خود را با هنگام تغییر یافتن حالت داخلی‌اش تغییر دهد. این الگو، طراحی مشابهی با ماشین حالات متناهی دارد. این الگوی طراحی را می‌توان به نوعی یک الگوی استراتژی دانست که قادر است استراتژی خود بوسیله صدا زدن توابع مختلف که در اینترفیس (واسط) آن تعریف شدند، تغییر دهد.

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

نگاه کلی

الگوی حالت یکی از بیست و سه الگوی طراحی ثبت شده توسط گروه چهار نفره بوده که به حل مسائلی که مکرر رخ می‌دهند کمک می‌کند. چنین مسائلی مربوط به طراحی انعطاف‌پذیر و قابل استفاده مجدد نرم‌افزارهای شی‌گرا می‌شوند. چنین شی‌هایی به‌سادگی پیاده‌سازی شده و قابل تغییر، تست و استفاده مجدد هستند.

الگوی حالت دو مسئله اصلی را حل می‌کند:

·       یک شی باید رفتار خود را هنگامی که حالت داخلی‌اش تغییر می‌کند، تغییر دهد.

·       رفتارهای وابسته به حالت باید به طور مستقل تعریف شوند. این یعنی اضافه کردن حالت‌های جدید نباید رفتار حالت های کنونی را تغییر دهد..

پیاده‌سازی رفتارهای وابسته به حالت بطور مستقیم داخل یک کلاس انعطاف‌پذیری کمی دارد چون باعث می‌شود آن کلاس محدود به یک رفتار خاص باشد و اضافه کردن حالت جدید یا تغییر رفتار در آینده بدون اعمال تغییرات برروی کلاس غیرممکن خواهد شد. این الگو برای این مسئله دو راه حل دارد:

·       شی‌هایی جدا (به عنوان state) تعریف شوند که رفتارهای وابسته به حالت را برای هر حالت کپسوله‌سازی کنند. این یعنی یک واسط (interface) برای رفتارهای وابسته به حالت تعریف شود و سپس کلاس‌هایی برای پیاده‌سازی واسط در هر حالت تعریف شوند.

·       یک کلاس بجای پیاده‌سازی مستقیم، رفتارهای وابسته به حالت را به یکی از اشیا حالت واگذاری می‌کند.

این باعث می‌شود یک کلاس بطور مستقل از پیاده‌سازی رفتارهای وابسته به حالت عمل کند. حالت‌های جدید با تعریف کردن کلاس‌های حالت جدید ساخته می‌شوند و یک کلاس می‌تواند با تغییر شی حالت کنونی خود در زمان اجرا رفتار خود را تغییر دهد.

ساختار

در دیاگرام روبرو، کلاس Context بطور مستقیم رفتار های وابسته به حالت را پیاده سازی نمی‌کند. در عوض، Context به واسط حالت برای اعمال رفتار های وابسته به حالت اشاره می‌کند که باعث می‌شود Context از پیاده سازی آن رفتار ها مستقل باشد. کلاس‌های State1 و State2 واسط State را پیاده می‌کنند.