Last active
March 10, 2019 09:40
-
-
Save thonglinhma/7985f6805ff5895f1b26e72f4b0d46f7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class PlanetVisitor { | |
void visit({Planet planet}); | |
} | |
abstract class Planet { | |
void accept({PlanetVisitor visitor}); | |
} | |
class MoonJedah extends Planet { | |
@override | |
void accept({PlanetVisitor visitor}) => visitor.visit(planet: this); | |
} | |
class PlanetAlderaan extends Planet { | |
@override | |
void accept({PlanetVisitor visitor}) => visitor.visit(planet: this); | |
} | |
class PlanetCoruscant extends Planet { | |
@override | |
void accept({PlanetVisitor visitor}) => visitor.visit(planet: this); | |
} | |
class PlanetTatooine extends Planet { | |
@override | |
void accept({PlanetVisitor visitor}) => visitor.visit(planet: this); | |
} | |
class NameVisitor extends PlanetVisitor { | |
String name = ""; | |
NameVisitor([this.name]); | |
@override | |
void visit({Planet planet}) { | |
if (planet is PlanetAlderaan) { | |
name = "Alderaan"; | |
} else if (planet is PlanetCoruscant) { | |
name = "Coruscant"; | |
} else if (planet is PlanetTatooine) { | |
name = "Tatooine"; | |
} else if (planet is MoonJedah) { | |
name = "Jedah"; | |
} | |
} | |
} | |
main(List<String> arguments) { | |
final planets = <Planet>[new PlanetAlderaan(), new PlanetCoruscant(), new PlanetTatooine(), new MoonJedah()]; | |
final names = planets.map<String>((planet) { | |
final visitor = new NameVisitor(); | |
planet.accept(visitor: visitor); | |
return visitor.name; | |
}); | |
names.forEach((name) => print(name)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment