Я думаю, что модель стратегии подойдет вам лучше всего.
Вы реализуете класс CashFlow, который содержит свойство CashFlowStrategy, которое выполняет обработку.
Я не до конца понимаю требования и различия между потоками, но что-то вроде этого может работать (meta-c ++, неверный код):
class CashFlowStrategy {
public:
virtual void ProcessFlow(Account from, Account to);
}
class FixedRateCashFlowStrategy : public CashFlowStrategy {
public:
void ProcessFlow(Account from, Account to) { ... }
}
class CashFlow {
private:
CashFlowStrategy strategy;
public:
CashFlow(CashFlowStrategy &strategy) { this->strategy = strategy; }
void Process() { this->strategy->ProcessFlow(this->from, this->to); }
}
Вам нужен только std::vector<CashFlow>
, решение о том, как выполнять обработку, скрыто в стратегии, поэтому вам не нужно об этом заботиться.