基本概念
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不改变被访问类的前提下,定义对其进行操作的新操作。
实现的模块有:
-
ObjectStructure(对象结构):用于存储 Element 对象,提供了遍历元素的方法。
-
Visitor(访问者):声明了对不同 Element 的访问方法。
-
ConcreteVisitor(具体访问者):实现了 Visitor 的访问方法,定义了对每种元素的具体访问逻辑。
-
Element(元素):定义了接受 Visitor 访问的方法。
-
ConcreteElement(具体元素):实现了 Element 的被访问方法,定义了接受访问者的具体逻辑。
使用场景
当不希望去修改一个类的内部结构,但是要给这个类添加大量操作时。
或者说,不希望对一个类的操作"污染"了这个类本身时。
实现
qFind
qFind 函数类似于 std::find 函数,但是现在已经过时,不建议使用。实现qFind的例子为:
QList<int> numbers = {1, 2, 3, 4, 5};
int index = qFind(numbers.begin(), numbers.end(), 3) - numbers. Begin();
在这个例子里:
qFind:具体访问者(Concrete Visitor),实现了具体的查找特定逻辑的功能。
**int :**ConcreteElement(具体元素),提供了qFind的访问方法。
QList<int> numbers :ObjectStructure(对象结构),储存了大量的int元素。