核心:将数据结构和数据的处理分开
注意:注意函数的参数传递和调用关系
例子:
class Element; class Visitor { public: virtual void Visit(Element* element) = 0; }; class Element { public: virtual void accept(Visitor* visitor) { visitor->Visit(this); } }; class Book: public Element { string name; int price; public: Book(string name, int price) { this->name = name; this->price = price; } string getName() { return name; } int getPrice() { return price; } }; class BookVisitor: public Visitor { public: void Visit(Element* element) { Book* book = dynamic_cast<Book*>(element); cout << "book: name = " << book->getName() << " price = " << book->getPrice() << endl; } };
int main() { Book* b = new Book("设计模式", 50); BookVisitor* bv = new BookVisitor(); b->accept(bv); return 0; }