代码如下:
<?php 
/** 
* 访问者模式 

* 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作 

*/ 
abstract class Visitor 

abstract public function visitCroncreteElementA($element); 
abstract public function visitCroncreteElementB($element); 

class ConcreteVisitor1 extends Visitor 

public function visitCroncreteElementA($element) 

echo get_class($element)." visit 1A<br/>"; 

public function visitCroncreteElementB($element) 

echo get_class($element)." visit 1B<br/>"; 


class ConcreteVisitor2 extends Visitor 

public function visitCroncreteElementA($element) 

echo get_class($element)." visit 2A<br/>"; 

public function visitCroncreteElementB($element) 

echo get_class($element)." visit 2B<br/>"; 


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);

转载请注明来源:php设计模式 Visitor 访问者模式

  哈尔滨品用软件有限公司致力于为哈尔滨的中小企业制作大气、美观的优秀网站,并且能够搭建符合百度排名规范的网站基底,使您的网站无需额外费用,即可稳步提升排名至首页。欢迎体验最佳的哈尔滨网站建设