Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package animal;
- abstract class Animal implements Node{
- public void speak(String s){
- System.out.println(s);
- }
- }
- class Snake extends Animal{
- public void speak(String s){
- System.out.println(s+"...sssss");
- }
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- }
- class Monkey extends Animal{
- public void speak(String s){
- System.out.println(s + " me like banana!");
- }
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- }
- interface Visitor{
- public void visit(Monkey monkey);
- public void visit(Snake snake);
- }
- interface Node {
- public void accept(Visitor visitor);
- }
- class FightMonkey implements Visitor {
- @Override
- public void visit(Monkey monkey) {
- System.out.println("Even fight");
- }
- @Override
- public void visit(Snake snake) {
- System.out.println("Snake wins");
- }
- }
- public class AnimalTest {
- public static void fight(Animal a, Animal b){
- System.out.println("boring");
- }
- public static void fight(Monkey m, Snake s) {
- System.out.println("Monkey run");
- }
- public static void fight(Snake s, Monkey m) {
- System.out.println("Snake kills");
- }
- public static void main(String[] args) {
- Animal snake = new Snake();
- Animal monkey = new Monkey();
- AnimalTest.fight(snake, monkey);
- Visitor monkeyFighter = new FightMonkey();
- snake.accept(monkeyFighter);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement