double dispatcher

public class Feeder {
	public void feed(Animal animal) {
		System.out.println("feed Animal.");
	}
	public void feed(Dog dog) {
		System.out.println("feed Dog: " + dog.eat());
	}
	public void feed(Cat cat) {
		System.out.println("feed Cat: " + cat.eat());
	}
}

public interface Animal {
	String eat();
}

public class Dog implements Animal {

	 @Override
 	public String eat() {
 		return "骨头";
	 }

}


public class Main {

	public static void main(String[] args) {
		Animal a = new Dog();
		Feeder feeder = new Feeder();
		feeder.feed(a);//print: feed Animal.
	}

}

public interface Animal {
	String eat();
	void bindFeeder(Feeder feeder);
}
public class Dog implements Animal {

	@Override
	public String eat() {
		return "骨头";
	}

	@Override
	public void bindFeeder(Feeder feeder) {
		feeder.feed(this);
	}

}
public class Main {

	public static void main(String[] args) {
		Animal a = new Dog();
		Feeder feeder = new Feeder();
		a.bindFeeder(feeder);//print:feed Dog: 骨头
	}

}

猜你喜欢

转载自sd-zyl.iteye.com/blog/2234600