Representing a combatant's equipment using the decorator pattern Is this a valid implementation of Decorator Pattern? Are there any possible improvements? Also, it is possible to remove decorations in a simple way?

 public interface Enemy {
    void fight();

    String shoutIdentity();
}




public class UnarmedEnemy implements Enemy {

    @Override
    public void fight() {
        System.out.println("I'm fighting with you!");
    }

    @Override
    public String shoutIdentity() {
        return "I'm your enemy! ";
    }
}




public class EnemyDecorator implements Enemy {

    private Enemy enemy;

    public EnemyDecorator(Enemy enemy) {
        this.enemy = enemy;
    }

    @Override
    public void fight() {
        enemy.fight();
    }

    @Override
    public String shoutIdentity() {
        return enemy.shoutIdentity();
    }
}




public class BowDecorator extends EnemyDecorator {

    public BowDecorator(Enemy enemy) {
        super(enemy);
    }

    @Override
    public void fight() {
        super.fight();
    }

    @Override
    public String shoutIdentity() {
        return super.shoutIdentity() + "I have a bow! ";
    }
}


    

public class ShieldDecorator extends EnemyDecorator {

    public ShieldDecorator(Enemy enemy) {
        super(enemy);
    }

    @Override
    public void fight() {
        super.fight();
    }

    @Override
    public String shoutIdentity() {
        return super.shoutIdentity() + "I have a shield! ";
    }
}


    

public class SwordDecorator extends EnemyDecorator {

    public SwordDecorator(Enemy enemy) {
        super(enemy);
    }

    @Override
    public void fight() {
        super.fight();
    }

    @Override
    public String shoutIdentity() {
        return super.shoutIdentity() + "I have a sword! ";
    }
}


    

public class HorseDecorator extends EnemyDecorator {

    public HorseDecorator(Enemy enemy) {
        super(enemy);
    }

    @Override
    public void fight() {
        System.out.println("I'm NOT fighting with you!");
    }

    @Override
    public String shoutIdentity() {
        return super.shoutIdentity() + "I have a horse! I'm fleeing! ";
    }
}


    

public class App {
    public static void main(String[] args) {
        Enemy enemy = new UnarmedEnemy();
        System.out.println(enemy.shoutIdentity());
        enemy.fight();
        System.out.println("\nYour enemy found a shield..\n");
        enemy = new ShieldDecorator(enemy);
        System.out.println(enemy.shoutIdentity());
        enemy.fight();
        System.out.println("\nYour enemy found a bow..\n");
        enemy = new  BowDecorator(enemy);
        System.out.println(enemy.shoutIdentity());
        enemy.fight();
        System.out.println("\nYour enemy found a sword..\n");
        enemy = new SwordDecorator(enemy);
        System.out.println(enemy.shoutIdentity());
        enemy.fight();
        System.out.println("\nYour enemy found a horse..\n");
        enemy =  new HorseDecorator(enemy);
        System.out.println(enemy.shoutIdentity());
        enemy.fight();
    }
}
Implementation is OK, note: I will add method which adds new behaviour dynamically, for example:   

public class ShieldDecorator extends EnemyDecorator {

    ...
    private String addShield() {
        return "I have a shield! ";
    }

    @Override
    public String shoutIdentity() {
        return super.shoutIdentity() + addShield();
    }
}