php设计模式 Visitor (访问者模式)

简介:这是php设计模式 Visitor (访问者模式)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=339494' scrolling='no'>
1 <?php
2 /**
3 * 访问者模式
4 *
5 * 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作
6 *
7 */
8 abstract class Visitor
9 {
10 abstract public function visitCroncreteElementA($element);
11 abstract public function visitCroncreteElementB($element);
12 }
13
14 class ConcreteVisitor1 extends Visitor
15 {
16 public function visitCroncreteElementA($element)
17 {
18 echo get_class($element)." visit 1A<br/>";
19 }
20
21 public function visitCroncreteElementB($element)
22 {
23 echo get_class($element)." visit 1B<br/>";
24 }
25 }
26
27 class ConcreteVisitor2 extends Visitor
28 {
29 public function visitCroncreteElementA($element)
30 {
31 echo get_class($element)." visit 2A<br/>";
32 }
33
34 public function visitCroncreteElementB($element)
35 {
36 echo get_class($element)." visit 2B<br/>";
37 }
38 }
39
40 abstract class Element
41 {
42 abstract public function accept($visitor);
43 }
44
45 class ConcreteElementA extends Element
46 {
47 public function accept($visitor)
48 {
49 $visitor->visitCroncreteElementA($this);
50 }
51 }
52
53 class ConcreteElementB extends Element
54 {
55 public function accept($visitor)
56 {
57 $visitor->visitCroncreteElementB($this);
58 }
59 }
60
61 class ObjectStructure
62 {
63 private $_elements = array();
64
65 public function attach($element)
66 {
67 $this->_elements[] = $element;
68 }
69
70 public function detach($element)
71 {
72 if($key = array_search($element,$this->_elements) !== false) unset($this->_elements[$key]);
73 }
74
75 public function accept($visitor)
76 {
77 foreach($this->_elements as $element)
78 {
79 $element->accept($visitor);
80 }
81 }
82 }
83
84 //
85 $objOS = new ObjectStructure();
86 $objOS->attach(new ConcreteElementA());
87 $objOS->attach(new ConcreteElementB());
88
89 $objCV1 = new ConcreteVisitor1();
90 $objCV2 = new ConcreteVisitor2();
91
92 $objOS->accept($objCV1);
93 $objOS->accept($objCV2);

爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

http://biancheng.dnbcw.info/php/339494.html pageNo:8
原文地址:https://www.cnblogs.com/ooooo/p/2246161.html