• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

php设计模式 Visitor 访问者模式

PHP admin 1年前 (2018-06-08) 11次浏览 未收录 0个评论

复制代码 代码如下:

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


39MO , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:php设计模式 Visitor 访问者模式
喜欢 (0)
[1353713598@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址