php设计模式 Visitor 访问者模式
程序员文章站
2024-02-04 22:09:22
复制代码 代码如下:
<?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<br/>";
}
public function visitcroncreteelementb($element)
{
echo get_class($element)." visit 1b<br/>";
}
}
class concretevisitor2 extends visitor
{
public function visitcroncreteelementa($element)
{
echo get_class($element)." visit 2a<br/>";
}
public function visitcroncreteelementb($element)
{
echo get_class($element)." visit 2b<br/>";
}
}
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);
复制代码 代码如下:
<?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<br/>";
}
public function visitcroncreteelementb($element)
{
echo get_class($element)." visit 1b<br/>";
}
}
class concretevisitor2 extends visitor
{
public function visitcroncreteelementa($element)
{
echo get_class($element)." visit 2a<br/>";
}
public function visitcroncreteelementb($element)
{
echo get_class($element)." visit 2b<br/>";
}
}
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);
下一篇: 组合算法的PHP解答方法
推荐阅读
-
php设计模式 Visitor 访问者模式
-
PHP中MVC模式的模板引擎开发经验分享
-
详解C#的设计模式编程之抽象工厂模式的应用
-
php单例模式实现方法分析,php例模式_PHP教程
-
php单例模式示例分享_PHP教程
-
牛X是种态度(答复: 对于水平一般的程序员,技术要深度还是广度) 博客分类: 生活 编程luceneGoogle搜索引擎设计模式
-
php设计模式 Decorator(装饰模式)_PHP
-
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
-
Ajax框架- ZK 3.6.1释出 最牛新功能展示 zk框架AjaxMVC设计模式
-
Ajax框架- ZK 3.6.1释出 最牛新功能展示 zk框架AjaxMVC设计模式