代碼如下:
<?php 
/** 
* 訪問(wèn)者模式 

* 表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,可以在不改變各元素的類(lèi)的前提下定義作用于這些元素的新操作 

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

轉(zhuǎn)載請(qǐng)注明來(lái)源:php設(shè)計(jì)模式 Visitor 訪問(wèn)者模式

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)