Android-FAQ icon indicating copy to clipboard operation
Android-FAQ copied to clipboard

‫ State pattern چیست؟ و تفاوتش با Strategy pattern چیست؟

Open hamed-rv opened this issue 5 years ago • 2 comments

hamed-rv avatar Jul 08 '20 19:07 hamed-rv

اگر بخواهیم جایگاه الگوی طراحی State را در طبقه بندی الگو های طراحی بررسی کنیم، مشخص می‌شود که این الگو بر اساس هدف، جزء الگو های رفتاری یا Behavioral بوده و بر اساس حوزه، در دسته Object قرار گرفته است.

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

شاید درباره ی ماشین‌هایstate شنیده باشید. ماشین‌های state معمولا با عملگرهای شرطی زیادی (مثل if یا switch) اجرا می‌شوند که با توجه به وضعیت فعلی شی، رفتار مناسب را انتخاب می‌کنند. روش الگوی طراحی state، روشی تمیزتر برای یک ماشین state می‌باشد که می­تواند رفتار خود را در زمان اجرا تغییر دهد، بدون این که تبدیل به عبارت بزرگ شرطی شود.

MohsenNooriArdestani avatar May 16 '22 12:05 MohsenNooriArdestani

در پترن State رفتار کلاس بر اساس وضعیت (State) داخلی آن تغییر می‌کند. با توجه به آرگومانی که به کلاس داده می‌شود، رفتار آن تغییر می‌کند (تغییر رفتار را در مثال زیر بیشتر درک خواهید کرد). برای درک بهتر به دیاگرام بالا توجه کنید، Context میتواند چندین وضعیت را داشته باشد. وقتی Request صدا زده شود درخواست به کمک State انجام می‌شود. State یک Interface بوده و ساختار کلی تمامی وضعیت‌ها (State) را تعریف می‌کند. کلاس Concrete State یک پیاده سازی از State است و برای پاسخگویی و کنترل Request می‌باشد.

با تعاریف بالا (البته کمی گیج کننده بود!!) وقتی در Context یک وضعیت (State) تغییر کند کلاس Concrete State مخصوص آن صدا زده شده و اجرا می‌شود.

MohsenNooriArdestani avatar May 16 '22 12:05 MohsenNooriArdestani