服务器之家

服务器之家 > 正文

php设计模式 Visitor 访问者模式

时间:2019-12-03 12:16     来源/作者:PHP教程网

代码如下:


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

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部