Introduce Attacker and refactor Attack to use it