【发布时间】:2017-06-14 08:31:48
【问题描述】:
目前我正在开发一个使用Visitor Pattern 的项目。在使用这种模式时,我发现自己在编写 cmets,例如:
* @param VisitorInterface $visitor The visitor to visit.
访问者模式由以下接口组成:
VisitorInterface {
public function visit($object);
}
VisitableInterface {
public function accept(VisitorInterface $visitor);
}
现在我的问题是:不应该是相反的吗?
VisitorInterface {
public function accept($object);
}
VisitableInterface {
public function visit(VisitorInterface $visitor);
}
因为现在访问者会接受要访问的东西,因为访问者应该是访问某物的东西。而可访问对象现在将接受访问者。
例如:
class Party implements VisitableInterface {
public function visit(VisitorInterface $visitor) {
$visitor->accept($this);
}
}
class Human implements VisitorInterface {
public function accept($object) {
// do something with object
}
}
所以现在我们有一个接待访客的派对。可以要求这些访问者接受派对的某些东西来做某事。
我希望能够很好地解释我对此的想法,以表达我的“担忧”。请不要责怪我试图破坏设计模式:-)
【问题讨论】:
标签: design-patterns visitor-pattern