factory design pattern

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

Upload: derek-banas

Post on 30-Oct-2014

37 views

Category:

Documents


0 download

DESCRIPTION

You use the Factory design pattern when you want to define the class of an object at runtime. It also allows you to encapsulate object creation so that you can keep all object creation code in one place.

TRANSCRIPT

Page 1: Factory Design Pattern

The Factory Pattern allows you to create objects without specifying the exact class ofobject that will be created.

FactoryDesignPattern

UFOEnemyShip BigUFOEnemyShip

Implements

<client><factory>

EnemyShipFactory<abstract>EnemyShip

Make aUFO

EnemyShipTesting.java<Store>

EnemyShipFactory.java<Factory>

EnemyShip.java<AbstractClass> BigUFOEnemyShip UFOEnemyShip

UFORocketBoss UFO

namespeeddamage

public EnemyShip makeEnemyShip(String newShipType){ EnemyShip newShip = null; if (newShipType.equals("U")){ return new UFOEnemyShip(); } else if (newShipType.equals("R")){ return new RocketEnemyShip(); } else if (newShipType.equals("B")){ return new BigUFOEnemyShip(); } else return null; }

public static void main(String[] args){ // Create the factory object EnemyShipFactory shipFactory = new EnemyShipFactory(); // Enemy ship object EnemyShip theEnemy = null; Scanner userInput = new Scanner(System.in); System.out.print("What type of ship? (U / R / B)"); if (userInput.hasNextLine()){ String typeOfShip = userInput.nextLine(); theEnemy = shipFactory.makeEnemyShip(typeOfShip); if(theEnemy != null){ doStuffEnemy(theEnemy); } else System.out.print("Please enter U, R, or B next time"); }

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; }}

public class UFOEnemyShip extends EnemyShip { public UFOEnemyShip(){ setName("UFO Enemy Ship"); setDamage(20.0); setDamage(20.0); }}

public class BigUFOEnemyShip extends EnemyShip { public BigUFOEnemyShip(){ setName("Big UFO Enemy Ship"); setDamage(40.0); setSpeed(10.0); }}