//
// Created by win10 on 2021/11/16.
//
#include <thread>
#include <iostream>
using namespace std;
/*
* 简单工厂模式:
* 核心思想是用一个工厂来 根据输入的条件产生不同的类,然后根据不同类的 virtual 函数得到不同的结果。
*/
class COperation {
public:
COperation() = default;
virtual ~COperation() = default;
virtual double getResult() = 0;
public:
int m_first{};
int m_second{};
};
class AddOperation: public COperation {
public:
double getResult() override {
return this->m_first + this->m_second;
}
AddOperation() = default;
~AddOperation() = default;
};
class SubOperation: public COperation {
public:
double getResult() override {
return this->m_first - this->m_second;
}
SubOperation() = default;
~SubOperation() = default;
};
class MultiOperation: public COperation {
public:
double getResult() override {
return this->m_first * this->m_second;
}
MultiOperation() = default;
~MultiOperation() = default;
};
// 工厂类
class Factory {
public:
static COperation* create(char operationType);
};
COperation *Factory::create(char operationType) {
COperation* operation;
switch (operationType) {
case '+': {
operation = new AddOperation();
break;
}
case '-': {
operation = new SubOperation();
break;
}
case '*': {
operation = new MultiOperation();
break;
}
default: {
throw std::exception((string("Bad operationType: ") + operationType).c_str());
}
}
return operation;
}
int main() {
COperation* operation = Factory::create('*');
operation->m_first = 5;
operation->m_second = 10;
std::cout << "result: " << operation->getResult() << std::endl;
delete operation;
return 0;
}
09-28
09-28