0
点赞
收藏
分享

微信扫一扫

量化交易之设计模式篇 - 组合模式


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

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

/*
* 组合模式
*/

class Component {
public:
Component(string str): m_name(str) {}
virtual void add(Component* component) = 0;
virtual void display(int nDepth) = 0;

string m_name;
};

class Leaf: public Component {
public:
Leaf(string name): Component(name) {}

virtual void add(Component* component) {
std::cout << "leaf can't add." << std::endl;
}
virtual void display(int nDepth) {
string str;
for (int i(0); i < nDepth; i++)
str += '-';
str += this->m_name;
}
};

class Composite: public Component {
public:
Composite(string name): Component(name) {}

virtual void add(Component* component) {
this->m_component.push_back(component);
}
virtual void display(int nDepth) {
string str;
for(int i(0); i < nDepth; i++)
str += '-';
str += this->m_name;

std::cout << str << std::endl;
for(auto iterator = this->m_component.begin(); iterator != this->m_component.end(); iterator++) {
(*iterator)->display(nDepth + 2);
}
}

private:
vector<Component*> m_component;
};

int main() {
Composite* composite1 = new Composite("xw");
composite1->add(new Leaf("xl"));
composite1->add(new Leaf("xz"));

Composite* composite2 = new Composite("xxw");
composite2->add(new Leaf("ds"));
composite1->add(composite2);
composite1->display(1);

return 0;
}

举报

相关推荐

0 条评论