State پترن در جاوا (State Pattern)

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

  1. شی گرایی در جاوا
  2. متد در جاوا
  3. Constructor در جاوا
  4. This در جاوا
  5. Interface در جاوا
  6. ارث بری در جاوا

Behavioral Design Pattern

یکی از زیر شاخه‌های دیزاین پترن Behavioral Design Pattern می‌باشد. یکی از وظایف اصلی این دیزاین پترن، تعامل اشیا و جداسازی وظایف آنها با یکدیگر است. تعریف کامل Behavioral Design Pattern بدین صورت است که، تمامی اشیا با یکدیگر به راحتی بتوانند ارتباط برقرار کرده، بدون آنکه باعث وابستگی بین آنها شود.

State پترن در جاوا

State پترن در جاوا

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

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

مثال State پترن در جاوا

در مثال State پترن در جاوا ما یک تلویزیون را در نظر گرفتیم. دو وضعیت On و Off را برای این مثال تعریف کرده‌ایم. حال با تعاریف داده شده Interface را به نام State به صورت زیر تعریف کرده‌ایم:

دو کلاس TVStartState و TVStopState به صورت زیر پیاده سازی کردیم(دقت کنید به دیاگرام Concrete کلاس ها):

در کلاس Context ما State های خود را تنظیم می‌کنیم. کد این کلاس به صورت زیر است:

تست مثال State پترن در جاوا

برای تست کد‌های بالا، کد Main زیر را بنویسید:

خروجی کدهای بالا در زیر مشاهده می‌کنید:

پسورد: www.codegate.ir

دسته : design pattern, java, جاوا, دیزاین پترن

دیدگاه بگذارید

نظر شما چیست؟

مطلع کردن شما از
avatar

wpDiscuz