(待改進... 終於快結束了 (累...)
接受(Acceptance): 每個元素都接受一個訪問者
訪問(Visitation): 訪問者對元素執行一個操作
// Element 接口
class Element {
public:
    virtual void accept(class Visitor &v) = 0;
};
// ConcreteElementA
class ConcreteElementA : public Element {
public:
    void accept(Visitor &v) override {
        v.visit(*this);
    }
    
    void operationA() {
        std::cout << "Operation A" << std::endl;
    }
};
// ConcreteElementB
class ConcreteElementB : public Element {
public:
    void accept(Visitor &v) override {
        v.visit(*this);
    }
    
    void operationB() {
        std::cout << "Operation B" << std::endl;
    }
};
// Visitor 接口
class Visitor {
public:
    virtual void visit(ConcreteElementA &element) = 0;
    virtual void visit(ConcreteElementB &element) = 0;
};
// ConcreteVisitor
class ConcreteVisitor : public Visitor {
public:
    void visit(ConcreteElementA &element) override {
        element.operationA();
    }
    void visit(ConcreteElementB &element) override {
        element.operationB();
    }
};
// 主函数
int main() {
    ConcreteElementA elementA;
    ConcreteElementB elementB;
    ConcreteVisitor visitor;
    elementA.accept(visitor);
    elementB.accept(visitor);
}
Visitor 設計模式是一個強大的工具,用於將算法與其操作的對象分離,從而遵循關鍵的軟件設計原則。然而,其應用應謹慎考慮,尤其是在對象結構經常更改的系統中