@Sword_Dancer

В чём суть шаблона проектирования Посетитель?

class MyClass1
{
    function accept(OperationGroup $operation) {$operation->visitMyClass1($this);}
    function method1() {}
    function method2() {}
}

abstract class OperationGroup {}
class OperationGroup1 extends OperationGroup
{
    function visitMyClass1(MyClass1 $myClass1) {$myClass1->method1(); /*.............*/ }
    function visitMyClass2(MyClass2 $myClass2) {$myClass2->method1(); /*.............*/ }
}

$myClass1 = new MyClass1();
$operationGroup1 = new OperationGroup1();

$myClass1->accept($operationGroup1);

Подскажите, пожалуйста, в чём суть шаблона проектирования Посетитель? Невзирая на все прочитанные статьи, всё равно непонятно. Методы visitMyClass1, visitMyClass2 и т.д. нужны, я так понимаю, для инкапсуляции работы с исходными классами MyClass1 и т.д., но зачем нужен метод accept в них?
Почему нельзя напрямую вызывать $operationGroup1->visitMyClass1($myClass1); ?
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
KM-Brothers
@KM-Brothers
Я знаю, что ничего не знаю...
Посмотрите в книге "PHP. Объекты, шаблоны и методики программирования", страница 266.
Точно не помню, но так же должен быть хорошо рассмотрен данный шаблон в книге Мартина Фаулера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы