【问题标题】:Shouldn't the visitor pattern be refactored?访问者模式不应该重构吗?
【发布时间】: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


    【解决方案1】:

    方法是在 object 上使用参数调用的,而不是在参数上调用的。所以,如果你打电话给human.visit(party),这意味着人类访问了一些东西,并且在参数中你指定了什么 - 派对。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2012-05-01
      相关资源
      最近更新 更多