zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    HTML5新增的属性和废除的属性
    利用ajax的方式来提交数据到后台数据库及交互功能
    在BS表单上使用fastreport.net
    js获取电子秤串口数据
    XMPP基础
    xmpp简介
    扩展方法
    泛型委托、lambda表达式例子,备忘
    leetcode 127. Word Ladder ----- java
    leetcode 126. Word Ladder II ----- java
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246161.html
Copyright © 2011-2022 走看看