import java.util.Random;
public class AlienFactory {
private enum Types { SquidAlien, MonkeyAlien, TigerAlien, RatAlien };
Alien alien = null;
int howManyTypes = Types.values().length;
int randomIndex = (int)(Math.random()*howManyTypes);
Types t = Types.values()[randomIndex]; // back to enum
switch (t) {
case SquidAlien:
alien = new SquidAlien();
break;
case MonkeyAlien:
alien = new MonkeyAlien();
break;
case TigerAlien:
alien = new TigerAlien();
break;
case RatAlien:
alien = new RatAlien();
break;
default:
alien = new Alien("Uknown");
break;
}
return alien;
}
public static void main(String [] args) {
AlienFactory af = new AlienFactory();
for (int i=0; i < 10; ++i) {
Alien x = af.getAlien();
System.out.println( x );
}
}
}
public class BetterAlienFactory
{
private enum Types { SquidAlien, MonkeyAlien, TigerAlien, RatAlien };
private static Random r = new Random();
public Alien getAlien() {
Alien alien = null;
int rand = r.nextInt(Types.values().length);
Types alienType = Types.values()[rand];
// System.out.println("Alien Type = " + alienType);
try {
alien = (Alien)(Class.forName(alienType.toString()).getDeclaredConstructor().newInstance());
} catch (Exception e) {
System.out.println("Unknown class type.");
}
return alien;
}