سلام دوستان.
برای این الگو طراحی یک مثال میزنم امیدوارم به درک بهتر این دیزاین پترن کمک کنه
فرض کنید ما یک بیمار داریم و قرار چند دکتر اون رو معاینه کنند
اول یک اینترفیس برای این بیمار که نقش 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(); } }
اینطوری به آبجکت بیمار ی سری الگوریتم یا رفتارها رو اضافه کردیم بدون اینکه بخواین تغییری در کدهای آبجکت بیمار اضافه کنیم
موفق باشید....