0
点赞
收藏
分享

微信扫一扫

量化交易之设计模式篇 - 访问者模式


//
// Created by win10 on 2021/11/16.
//

#include <iostream>
#include <vector>
using namespace std;

/*
* 访问者模式
*/
class Man;
class Woman;
class Action {
public:
virtual void getManConclusion(Man* concreteElementA) = 0;
virtual void getWomanConclusion(Woman* concreteElementB) = 0;
};

class Success: public Action {
public:
virtual void getManConclusion(Man* concreteElementA) {
std::cout << __FUNCTION__ << std::endl;
}
virtual void getWomanConclusion(Woman* concreteElementB) {
std::cout << __FUNCTION__ << std::endl;
}
};

class Failure: public Action {
public:
virtual void getManConclusion(Man* concreteElementA) {
std::cout << __FUNCTION__ << std::endl;
}
virtual void getWomanConclusion(Woman* concreteElementB) {
std::cout << __FUNCTION__ << std::endl;
}
};

class Person {
public:
virtual void accept(Action* visitor) = 0;
};
class Man: public Person {
public:
virtual void accept(Action* visitor) {
visitor->getManConclusion(this);
}
};
class Woman: public Person {
public:
virtual void accept(Action* visitor) {
visitor->getWomanConclusion(this);
}
};

// 对象结构类
class ObjectStructure {
public:
void add(Person* person) {
this->m_personList.push_back(person);
}
void display(Action* action) {
for (auto iterator = this->m_personList.begin(); iterator != this->m_personList.end(); iterator++) {
(*iterator)->accept(action);
}
}

private:
vector<Person*> m_personList;
};

int main() {

ObjectStructure* objectStructure = new ObjectStructure();
objectStructure->add(new Man());
objectStructure->add(new Woman());

Success* success = new Success();
objectStructure->display(success);

Failure* failure = new Failure();
objectStructure->display(failure);

return 0;
}

举报

相关推荐

0 条评论