• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

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

  •  
  •   zjsxwc ·
    zjsxwc · Jul 30, 2019 · 900 views
    This topic created in 2480 days ago, the information mentioned may be changed or developed.

    访问者模式,主要目的是把不同 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 类也越来越庞大,我们应该怎么解决?

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4245 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:15 · PVG 13:15 · LAX 22:15 · JFK 01:15
    ♥ Do have faith in what you're doing.