دیزاین پترن Visitor از دسته رفتاری در مجموعه ۲۳ پترن مشهور Gang of Four است. عملیات تازه را از ساختار آبجکتها جدا میکند تا بتوان بدون تغییر کلاسهای عناصر، رفتارهای جدید روی آنها اجرا کرد.
سناریوی واقعی در فروشگاه
در فاکتور، آیتم محصول، هزینه حملونقل و تخفیف میتوانند هرکدام در گزارش مالی رفتار متفاوتی داشته باشند.
نمونه در PHP
interface InvoiceLine { public function accept(InvoiceVisitor $v): int; }
final class ProductLine implements InvoiceLine {
public function accept(InvoiceVisitor $v): int { return $v->visitProduct($this); }
}
نمونه در پایتون
class ProductLine:
def accept(self, visitor):
return visitor.visit_product(self)
class TaxVisitor:
def visit_product(self, line):
return round(line.price * 0.09)
چه زمانی مناسب نیست؟
Visitor افزودن عملیات را ساده میکند اما افزودن نوع جدید عنصر اغلب به تغییر Visitorها نیاز دارد.
برای شناخت جایگاه این پترن در سه دسته اصلی، دیزاین پترن را ببینید. مقاله دیزاین پترن باورژن و دوره آموزشی باورژن نیز منابع مرتبطاند.