走在架构师边上的边上
Posted yantuguiguziPGJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走在架构师边上的边上相关的知识,希望对你有一定的参考价值。
跟妹子聊天到深夜两点,实在不敢肝了。
这里分享海纳老师的《自己动手写python虚拟机》的一段访问者设计模式代码给大家。
我在qt的命令行应用上测试可行。
代码如下:
#include <QCoreApplication>
#include<string>
#include <iostream>
using namespace std;
class Visitor;
class Animal {
public:
virtual void accept(Visitor *v) {cout <<"emmm.."<<endl;}
};
class Dog:public Animal{
public:
virtual void accept(Visitor *v);
};
class Cat:public Animal{
public:
virtual void accept(Visitor *v);
};
class Fox:public Animal{
public:
virtual void accept(Visitor *v);
};
class Visitor{
public:
void visit(Animal * animal){};
virtual void visit(Dog * animal){};
virtual void visit(Cat * animal){};
virtual void visit(Fox * animal){};
};
class Speaker:public Visitor{
public:
void visit(Animal * pa){
pa->accept(this);
}
virtual void visit(Dog *pd) {
cout <<"wang"<<endl;
}
virtual void visit(Cat *pc) {
cout <<"miao"<<endl;
}
virtual void visit(Fox *pf) {
cout <<"woo"<<endl;
}
};
class Feeding:public Visitor{
public:
void visit(Animal * pa){
pa->accept(this);
}
virtual void visit(Dog *pd) {
cout <<"bone"<<endl;
}
virtual void visit(Cat *pc) {
cout <<"fish"<<endl;
}
virtual void visit(Fox *pf) {
cout <<"meat"<<endl;
}
};
void Dog::accept(Visitor *v){
v->visit(this);
}
void Cat::accept(Visitor *v){
v->visit(this);
}
void Fox::accept(Visitor *v){
v->visit(this);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Animal * animals[] = {new Dog(), new Cat(), new Fox()};
Speaker s;
for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
{
s.visit(animals[i]);
}
Feeding f;
for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
{
f.visit(animals[i]);
}
return a.exec();
}
这里再分享一篇Java的访问者模式代码解析文章给大家。
以上是关于走在架构师边上的边上的主要内容,如果未能解决你的问题,请参考以下文章