访问者模式
访问者模式是一种行为设计模式,它允许你在不改变元素类的前提下定义新操作。通过将操作封装在访问者类中,元素类可以接受不同的访问者并执行不同的操作。这种方式可以实现操作与数据结构的分离,使得添加新的操作变得更加容易。
使用场景:
1、当有多个不同的操作需要应用于一个数据结构,并且这些操作可能会频繁变化时,可以考虑使用访问者模式。
2、当数据结构有稳定的接口,但操作可能会发生变化时,可以使用访问者模式来对操作进行封装。
优势:
1、可以轻松地添加新的操作,而无需修改元素类。
2、将操作与数据结构分离,提高了代码的灵活性和可维护性。
劣势:
1、增加了系统的复杂性,引入了额外的类和接口。
2、可能会导致访问者类的数量增加,使得代码难以理解和维护。
Code
#include <iostream>
class ElementA;
class ElementB;
class Visitor {
public:
virtual void visit(ElementA* element) = 0;
virtual void visit(ElementB* element) = 0;
};
class Element {
public:
virtual void accept(Visitor* visitor) = 0;
};
class ElementA : public Element {
public:
void accept(Visitor* visitor) override {
visitor->visit(this);
}
void operationA() {
std::cout << "Operation A on Element A" << std::endl;
}
};
class ElementB : public Element {
public:
void accept(Visitor* visitor) override {
visitor->visit(this);
}
void operationB() {
std::cout << "Operation B on Element B" << std::endl;
}
};
class ConcreteVisitor : public Visitor {
public:
void visit(ElementA* element) override {
element->operationA();
}
void visit(ElementB* element) override {
element->operationB();
}
};
int main() {
ElementA elementA;
ElementB elementB;
ConcreteVisitor visitor;
elementA.accept(&visitor);
elementB.accept(&visitor);
while (1);
return 0;
}