Make a UFO
UFO Rocket Boss UFO [Link] <Factory>
public EnemyShip makeEnemyShip(String newShipType) { EnemyShip newShip = null; if ([Link]("U")){ return new UFOEnemyShip(); } else if ([Link]("R")){ return new RocketEnemyShip(); } else if ([Link]("B")){ return new BigUFOEnemyShip(); } else return null; }
name speed damage [Link] <AbstractClass>
public abstract class EnemyShip { private String name; private double speed; private double damage; public String getName() { return name; } public void setName(String newName) { name = newName; } public double getDamage() { return amtDamage; } public void setDamage(double newDamage) { amtDamage = newDamage; }
[Link] <Store>
public static void main(String[] args){ // Create the factory object EnemyShipFactory shipFactory = new EnemyShipFactory(); // Enemy ship object EnemyShip theEnemy = null; Scanner userInput = new Scanner([Link]); [Link]("What type of ship? (U / R / B)"); if ([Link]()){ String typeOfShip = [Link](); theEnemy = [Link](typeOfShip); if(theEnemy != null){ doStuffEnemy(theEnemy); } else [Link]("Please enter U, R, or B next time"); }
BigUFOEnemyShip
public class BigUFOEnemyShip extends EnemyShip { public BigUFOEnemyShip(){ setName("Big UFO Enemy Ship"); setDamage(40.0); setSpeed(10.0); } }
UFOEnemyShip
public class UFOEnemyShip extends EnemyShip { public UFOEnemyShip(){ setName("UFO Enemy Ship"); setDamage(20.0); setDamage(20.0);
The Factory Pattern allows you to create objects without specifying the exact class of object that will be created.
<client>
<factory> EnemyShipFactory
<abstract> EnemyShip
Implements
UFOEnemyShip BigUFOEnemyShip
Factory Design Pattern