设计模式之访问者模式
访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。访问者模式的目的使要把处理从数据结构中分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。
其UML图如下:
每个ConcreteVisitor都有自己的数据处理方式,但是它们处理的数据则是不变的。在ObjectStucture中有Element的列表,并提供了访问数据的接口。
示例代码如下:
// VisitorModel.h文件
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
class Visitor;
// 被访问元素
class Element
{
protected:
std::string m_strName;
public:
Element(std::string str)
{
m_strName = str;
}
std::string getName()
{
return m_strName;
}
virtual void Accept(Visitor * visitor) = 0;
};
class ConcreteElementA : public Element
{
public:
ConcreteElementA(std::string str) : Element(str) {
}
void Accept(