#هدف
به شیء این اجازه را میدهد که وقتی وضعیت درونیاش تغییر کرد، رفتارش را تغییر دهد. به نظر میرسد که شیء کلاس خود را عوض میکند.
- Context
- State
- ConcreteState
زمانی از این الگو استفاده کنید که
- رفتار شیء وابسته به وضعیتاش متغییر است و شیء بنا به وضعیت خود که در زمان اجرا مشخص میشود، تغییر حالتش متفاوت است.
- رفتارهای شیء توسط تعداد بسیار زیادی از متغییرهای شرطی تعیین میشود (اگر-آنگاههای زیاد).
خورشید در گردش حول زمین در وضعیتهای متفاوتی قرار میگیرد: بادمداد، چاشت، شامگاه و شبانگاه. که کد کارخواه آن به صورت زیر است:
```c++
Sun* sun = new Sun( new Bamdad() );
sun->afterSixHours();
cout << sun->getState() << endl;
sun->afterSixHours(); cout << sun->getState() << endl;
sun->afterSixHours(); cout << sun->getState() << endl;
<div dir="rtl">
# مثال
- برای طراحی Finite State Machine میتوان از این الگو استفاه کرد.
# مثالهای واقعی
<div dir="ltr">
- javax.faces.lifecycle.LifeCycle#execute() (controlled by FacesServlet, the behaviour is dependent on current phase (state) of JSF lifecycle)