Uses Observer and Strategy design patterns.
Strategy patterns include the "Behavior" interfaces that make adding new defenses or attack methods easier and without having to make changes to existing code. Observer patterns have the Subject and Observer interfaces, the built-in Observer is not used here.
If using IntelliJ, I would recommend starting a new project, creating each empty class, and copying and pasting each class.