复制代码代码如下:
/**
* ビジター パターン
*
* は、オブジェクト構造内の各要素に作用する操作を表します。各要素のクラスを変更せずに、これらの要素に作用する新しい操作を定義できます。*/
abstract class Visitor
{
abstract public function visitCroncreteElementA($element);
抽象パブリック関数 visitCroncreteElementB($element);
}
class ConcreteVisitor1 は Visitor を拡張します
{
public function visitCroncreteElementA($element)
{
echo get_class($element)." visit 1A
";
}
public function visitCroncreteElementB($element)
{
echo get_class($element)." visit 1B
";
}
}
class ConcreteVisitor2 は Visitor を拡張します
{
public function visitCroncreteElementA($element)
{
echo get_class($element)." visit 2A
";
}
public function visitCroncreteElementB($element)
{
echo get_class($element)." visit 2B
";
}
}
abstract クラス要素
{
abstract public function accept($visitor);
}
class ConcreteElementA は要素を拡張します
{
public function accept($visitor)
{
$visitor->visitCroncreteElementA($this);
}
}
class ConcreteElementB は Element を拡張します
{
public function accept($visitor)
{
$visitor->visitCroncreteElementB($this);
}
}
クラス ObjectStructure
{
private $_elements = array();
パブリック関数attach($element)
{
$this->_elements[] = $element;
}
public function detach($element)
{
if($key = array_search($element,$this->_elements) !== false) unset($this->_elements[$key]);
}
パブリック関数 accept($visitor)
{
foreach($this->_elements as $element)
{
$element->accept($visitor);
}
}
}
//
$objOS = new ObjectStructure();
$objOS->attach(new ConcreteElementA());
$objOS->attach(new ConcreteElementB());
$objCV1 = 新しい ConcreteVisitor1();
$objCV2 = 新しい ConcreteVisitor2();
$objOS->accept($objCV1);
$objOS->accept($objCV2);
http://www.bkjia.com/PHPjc/323745.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/323745.html技術記事構文コード例: ?php /** * 管理者モード * * 特定のオブジェクト構造に作用する各要素の操作を示し、各要素の種類を変更せずにこれに作用する可能性があります...