#ifndef CONTROLLER_H #define CONTROLLER_H #include #include #include class Node; class Actor; class Validator; class Modificator; class Controller { public: struct Initializer { const std::list& keywords; const std::string& message; }; explicit Controller(Initializer&& initializer); virtual ~Controller() = 0; virtual std::string interact(std::shared_ptr actor) = 0; bool validateInput(const std::string& input_word) const; void setValidator(const std::shared_ptr& validator); void setModificators(const std::list>& modificators); protected: void runModificators() const; std::list _keywords; std::string _interaction_message; std::shared_ptr _validator; std::list> _modificators; }; #endif // CONTROLLER_H