import java.util.*;

interface Functor<ImplicitType> {
	void invoke(ImplicitType implicit, Object ... explicits);
}

class BreathFire implements Functor<Character> {
	public void invoke(Character implicit, Object ... explicits) {
		for(int i = 0; i < explicits.length; i++) {
			System.out.println("Fire is being breathed!");
			Character c = (Character)explicits[i];
			c.health -= 10;
			implicit.health -= 1;
		}
	}
}



class Character {
	int health = 100;
	Functor<Character> attackStrategy = new BreathFire();
	public void attack(Character victim) {
		Character[] victims = {victim};
		attackStrategy.invoke(this, victims);
	}
}

public class FunctorTest {
	public static void main(String[] args) {
		Character a = new Character(), b = new Character(), c = new Character();
		a.attack(b);
	}

}