PHP设计模式访问者模式

复制代码代码如下所示:
< PHP

*访问者模式
*
*表示对对象结构中的元素起作用的操作,并且可以在不改变每个元素的类的情况下对这些元素定义新的操作。
*
* /
抽象类的访客
{
摘要公共功能visitcroncreteelementa($元);
摘要公共功能visitcroncreteelementb($元);
}
类concretevisitor1延伸游客
{
公共功能visitcroncreteelementa($元)
{
回声get_class($元)。访问1a;
}
公共功能visitcroncreteelementb($元)
{
回声get_class($元)。访问1b;
}
}
类concretevisitor2延伸游客
{
公共功能visitcroncreteelementa($元)
{
回声get_class($元)。访问2a;
}
公共功能visitcroncreteelementb($元)
{
回声get_class($元)。访问2b;
}
}
抽象类的元素
{
抽象公共函数接受(访问者);
}
类concreteelementa延伸元
{
公共功能接受(访问者)
{
访客- > visitcroncreteelementa美元(美元);
}
}
类concreteelementb延伸元
{
公共功能接受(访问者)
{
访客- > visitcroncreteelementb美元(美元);
}
}
类的构造
{
私人_elements美元=阵();
公共功能附加($元素)
{
美元-> _elements { } = $元;
}
公共功能分离($元素)
{
如果($键= array_search($元,美元-> _elements)!= = false)撤消(美元-> _elements { $关键});
}
公共功能接受(访问者)
{
foreach(美元-> _elements达元)
{
$元素>接受(访问者);
}
}
}

objos美元=新的构造();
objos美元->附加(新concreteelementa());
objos美元->附加(新concreteelementb());
objcv1美元=新concretevisitor1();
objcv2美元=新concretevisitor2();
objos ->接受美元(美元objcv1);
objos ->接受美元(美元objcv2);