There is no use in arguing about the low-level design of the fight system if the high-level design of the game is unknown. For example, in the typical JRPG style game, you have several game modes. You have the map mode, where you walk around. You have the menu mode, where you browse your inventory and stuff. And finally you have the fight (actually, you'd probably call it battle) mode that you enter when you stumble upon a monster.
In such a design, Battle is very much a class, implementing the GameMode interface. It is passed two arrays of FightingCharacter (as opposed to non-fighting characters like shopkeepers) pointers, which denote the two teams involved in the battle. The Battle will query those characters for actions in turn. This will probably return a pointer to an Action object. The Battle will then tell the Action to execute itself, deducting or adding HPs and MPs as appropriate. The Battle will then query the characters for their status and decide if the battle is finished or goes on.
Or you could have a completely different design.