Home > Article > Backend Development > PHP design pattern Visitor visitor pattern
Copy the code The code is as follows:
"; } public function visitCroncreteElementB($element) { echo get_class($element)." visit 1B
"; } } class ConcreteVisitor2 extends Visitor { public function visitCroncreteElementA($element) { echo get_class($element)." visit 2A
"; } public function visitCroncreteElementB($element) { echo get_class($element)." visit 2B
"; } } abstract class Element { abstract public function accept($visitor); } class ConcreteElementA extends Element { public function accept($visitor) { $visitor->visitCroncreteElementA($this); } } class ConcreteElementB extends Element { public function accept($visitor) { $visitor->visitCroncreteElementB($this); } } class ObjectStructure { private $_elements = array(); public function attach($element) { $this->_elements[] = $element; } public function detach($element) { if($key = array_search($element,$this->_elements) !== false) unset($this->_elements[$key]); } public function accept($visitor) { foreach($this->_elements as $element) { $element->accept($visitor); } } } // $objOS = new ObjectStructure(); $objOS->attach(new ConcreteElementA()); $objOS->attach(new ConcreteElementB()); $objCV1 = new ConcreteVisitor1(); $objCV2 = new ConcreteVisitor2(); $objOS->accept($objCV1); $objOS->accept($objCV2);