سلام دوستان.
برای این الگو طراحی یک مثال میزنم امیدوارم به درک بهتر این دیزاین پترن کمک کنه
فرض کنید ما یک بیمار داریم و قرار چند دکتر اون رو معاینه کنند
اول یک اینترفیس برای این بیمار که نقش Element رو داره مینویسیم
interface IPatient
{
public function accept(DoctorVistor $visitor);
}
حالا باید یک اینترفیس برای visitorها که اینجا همون دکترها هستند نوشته بشه
interface DoctorVistor
{
public function heartCheck(IPatient $patient); // gereftane navare ghalb az bimar
public function brainCheck(IPatient $patient); // gereftane navare maghz az bimar
}
حالا باید concrit visitorها رو بنویسیم
class DoctorA implements DoctorVistor
{
public function HeartCheck(IPatient $patient)
{
echo "checking heart";
}
public function BrainCheck(IPatient $patient)
{
echo "checking brain";
}
}
حالا concrit elemntها رو مینویسیم که از ورودی باید visitor رو بگیره
class Patient implements IPatient
{
public function accept(DoctorVistor $visitor)
{
$visitor->heartCheck();
}
}
اینطوری به آبجکت بیمار ی سری الگوریتم یا رفتارها رو اضافه کردیم بدون اینکه بخواین تغییری در کدهای آبجکت بیمار اضافه کنیم
موفق باشید....