دیزاین پترن State از دسته رفتاری در مجموعه ۲۳ پترن مشهور Gang of Four است. رفتار یک آبجکت را بر اساس وضعیت فعلی آن تغییر میدهد و انتقالهای مجاز را کنترل میکند.
سناریوی واقعی در فروشگاه
سفارش در وضعیت Pending اجازه لغو دارد اما پس از Shipped شدن ممکن است لغو مستقیم مجاز نباشد.
نمونه در PHP
interface OrderState { public function cancel(Order $order): void; }
final class PendingState implements OrderState {
public function cancel(Order $order): void {
$order->status = 'cancelled';
}
}
نمونه در پایتون
class PendingState:
def cancel(self, order):
order.status = 'cancelled'
class ShippedState:
def cancel(self, order):
raise ValueError('Cannot cancel shipped order')
چه زمانی مناسب نیست؟
استیت را نباید با جدول ساده وضعیتها یکی دانست. زمانی ارزش دارد که رفتار هر وضعیت واقعا تفاوت چشمگیر داشته باشد.
برای شناخت جایگاه این پترن در سه دسته اصلی، دیزاین پترن را ببینید. مقاله دیزاین پترن باورژن و دوره آموزشی باورژن نیز منابع مرتبطاند.