0
点赞
收藏
分享

微信扫一扫

量化交易之设计模式篇 - 策略模式升级版


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

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

// 策略基类
class COperation {
public:
COperation() = default;
virtual ~COperation() = default;

virtual double getResult() = 0;

protected:
int m_first;
int m_second;
};

// 策略具体类
class AddOperation: public COperation {
public:
AddOperation(int first, int second) {
this->m_first = first;
this->m_second = second;
};
virtual ~AddOperation() = default;

virtual double getResult() override {
return this->m_first + this->m_second;
}
};

class SubOperation: public COperation {
public:
SubOperation(int first, int second) {
this->m_first = first;
this->m_second = second;
}
virtual ~SubOperation() = default;

virtual double getResult() override {
return this->m_first - this->m_second;
}
};

class MultiOperation: public COperation {
public:
MultiOperation(int first, int second) {
this->m_first = first;
this->m_second = second;
}
virtual ~MultiOperation() = default;

virtual double getResult() override {
return this->m_first * this->m_second;
}
};

class Context {
public:
Context(int firstValue, int secondValue, char operationType) {

switch (operationType) {
case '+': {
this->m_operationFunctionObj = new AddOperation(firstValue, secondValue);
break;
}
case '-': {
this->m_operationFunctionObj = new SubOperation(firstValue, secondValue);
break;
}
case '*': {
this->m_operationFunctionObj = new MultiOperation(firstValue, secondValue);
break;
}
default:
throw std::exception(string(string("Bad operationType: ") + operationType).c_str());

}

}

double getResult() {
return this->m_operationFunctionObj->getResult();
}

virtual ~Context() {
if (this->m_operationFunctionObj != nullptr) {
delete this->m_operationFunctionObj;
this->m_operationFunctionObj = nullptr;
}
}

private:
COperation* m_operationFunctionObj;
};

int main() {
Context* context = new Context(10, 5, '*');
std::cout << context->getResult() << std::endl;

delete context;

return 0;
}

举报

相关推荐

0 条评论