如何处理访问者模式随着被访问 ElementNode 类型越来越多导致 Visitor 类越写越大?

2019-07-30 09:55:25 +08:00
 zjsxwc

访问者模式,主要目的是把不同 ElementNode 子类的处理都集中写到一个 Visitor 类里,好方便管理

//c++
class XVisitor : public Visitor
{
public:
    void visit(ElementNode *en);
    void visitA(A *a);
    void visitB(B *b);
    void visitC(C *c);
    void visitD(D *d);
};
void XVisitor::visit(ElementNode *en)
{ en->accept(this); }



class A : public ElementNode
{
public:
    void accept(Visitor *v);
}
void A::accept(Visitor *v)
{ v->visitA(this); }


int main() {
    XVisitor v;
    A en;
    v.visit(&en);
}

ps,其实可以用多态把 visitor 的每个visitA(A *a)方法写作visit(A *a)来减少一点代码量,对于没有多态的动态语言比如 PHP、Python 等就是上面通用写法方式,当然脚本语言可以直接反射黑魔法我就不用了。

于是问题来了,当 ElementNode 子类 A、B、C、D 越来越多时, 这个 visitor 类也越来越庞大,我们应该怎么解决?

615 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX