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
  • 相关阅读:
    大话设计模式C++ 适配器模式
    36. Valid Sudoku
    c++ 常用的数据结构
    《大话设计模式》c++实现 状态模式
    c++ 各种类型转换
    38. Count and Say
    《大话设计模式》c++实现 抽象工厂模式
    66. Plus One
    49. Group Anagrams
    《大话设计模式》c++实现 建造者模式
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246161.html
Copyright © 2011-2022 走看看