学习php设计模式 php实现访问者模式(Visitor)
《:学习php设计模式 php实现访问者模式(Visitor)》要点: 拜访者模式表示一个作用于某对象结构中各元素的操作.它可以在不修改各元素类的前提下定义作用于这些元素的新操作,即动态的增加具体拜访者角色. PHP教程 二、Visitor模式中主要角色PHP教程 1)抽象拜访者角色(Visitor):为该对象结构(ObjectStructure)中的每一个具体元素提供一个拜访操作接口.该操作接口的名字和参数标识了 要拜访的具体元素角色.这样拜访者就可以通过该元素角色的特定接口直接拜访它. 拜访者模式有如下的缺点: 使用Visitor模式的前提: 对象群结构中(Collection) 中的对象类型很少改变. 四、Visitor模式与其它模式PHP教程 1、如果所浏览的结构对象是线性的,使用迭代模式而不是拜访者模式也是可以的 五、Visitor模式PHP示例 <?php interface Visitor { public function visitConcreteElementA(ConcreteElementA $elementA); public function visitConcreteElementB(concreteElementB $elementB); } interface Element { public function accept(Visitor $visitor); } /** * 具体的拜访者1 */ class ConcreteVisitor1 implements Visitor { public function visitConcreteElementA(ConcreteElementA $elementA) { echo $elementA->getName() . " visitd by ConcerteVisitor1 <br />"; } public function visitConcreteElementB(ConcreteElementB $elementB) { echo $elementB->getName() . " visited by ConcerteVisitor1 <br />"; } } /** * 具体的拜访者2 */ class ConcreteVisitor2 implements Visitor { public function visitConcreteElementA(ConcreteElementA $elementA) { echo $elementA->getName() . " visitd by ConcerteVisitor2 <br />"; } public function visitConcreteElementB(ConcreteElementB $elementB) { echo $elementB->getName() . " visited by ConcerteVisitor2 <br />"; } } /** * 具体元素A */ class ConcreteElementA implements Element { private $_name; public function __construct($name) { $this->_name = $name; } public function getName() { return $this->_name; } /** * 接受拜访者调用它针对该元素的新方法 * @param Visitor $visitor */ public function accept(Visitor $visitor) { $visitor->visitConcreteElementA($this); } } /** * 具体元素B */ class ConcreteElementB implements Element { private $_name; public function __construct($name) { $this->_name = $name; } public function getName() { return $this->_name; } /** * 接受拜访者调用它针对该元素的新方法 * @param Visitor $visitor */ public function accept(Visitor $visitor) { $visitor->visitConcreteElementB($this); } } /** * 对象结构 即元素的集合 */ class ObjectStructure { private $_collection; public function __construct() { $this->_collection = array(); } public function attach(Element $element) { return array_push($this->_collection,$element); } public function detach(Element $element) { $index = array_search($element,$this->_collection); if ($index !== FALSE) { unset($this->_collection[$index]); } return $index; } public function accept(Visitor $visitor) { foreach ($this->_collection as $element) { $element->accept($visitor); } } } class Client { /** * Main program. */ public static function main() { $elementA = new ConcreteElementA("ElementA"); $elementB = new ConcreteElementB("ElementB"); $elementA2 = new ConcreteElementB("ElementA2"); $visitor1 = new ConcreteVisitor1(); $visitor2 = new ConcreteVisitor2(); $os = new ObjectStructure(); $os->attach($elementA); $os->attach($elementB); $os->attach($elementA2); $os->detach($elementA); $os->accept($visitor1); $os->accept($visitor2); } } Client::main(); ?> 以上就是使用php实现拜访者模式的代码,还有一些关于拜访者模式的概念区分,希望对大家的学习有所帮助.PHP教程 欢迎参与《:学习php设计模式 php实现访问者模式(Visitor)》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |