Strategy Pattern in Java 8
Yes, this is a good implementation of the strategy pattern. I don't know if the code you posted is just a simplification or not but I think that you have to prevent a NullPointerException when a client class doesn't specify the strategy to use. You can achieve this task in many ways, for example eliminating the empty constructor or inserting a default strategy in the empty constructor. Another elegant way would be making the strategy a parameter of the fight() method (obviously only if it used within the method):

public void fight(AIStrategy strategy) {
     strategy.player();
}


Making this way you will make the classes lighter, and it will be more difficult to get a NullPointerException.

public class App {

    public static void main(String[] args) {
        AIPlayer aiPlayer = new AIPlayer();
        AIStrategy stragey = () -&gt; System.out.println("Default strategy");
        Scanner sc = new Scanner(System.in);
        String difficulty = sc.next(); 
        switch (difficulty) {
            case "chill":
                strategy = () -&gt; System.out.println("The opponent is playing a chill strategy...");
                break;
            case "calculated":
                strategy = () -&gt; System.out.println("The opponent is playing a calculated strategy...");
                break;
        }
        aiPlayer.fight(strategy);
        System.out.println("Is the opponent hurt?");
        boolean isHurted = sc.nextBoolean();
        if (isHurted) {
            strategy = () -&gt; System.out.println("The opponent changed his strategy. Now he is having a holy rage!!"));
            aiPlayer.fight();
        }
        aiPlayer.fight(strategy);
    }
}