(待改進... 終於快結束了 (累...)
接受(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 設計模式是一個強大的工具,用於將算法與其操作的對象分離,從而遵循關鍵的軟件設計原則。然而,其應用應謹慎考慮,尤其是在對象結構經常更改的系統中