Instead
of creating new object every time, Prototype pattern creates an object using
cloning. If the cost of creating a new object is large and creation is resource
intensive, it is preferable to clone the object.
Using
Prototype design pattern, we clone the existing instance in hand and then make
the required changes to the cloned instance.
Car.java
public abstract class Car implements Cloneable{ private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } public void print(){ } @Override public Car clone(){ Car myCar = null; try { myCar = (Car)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return myCar; } }
SportsCar.java
public class SportsCar extends Car{ SportsCar(){ this.setType("Sports Car"); } @Override public void print(){ System.out.println("Car of type :" + this.getType()); } }
LuxuryCar.java
public class LuxuryCar extends Car{ LuxuryCar(){ this.setType("Luxury Car"); } @Override public void print(){ System.out.println("Car of type :" + this.getType()); } }
LargeCar.java
public class LargeCar extends Car{ LargeCar(){ this.setType("Large Car"); } @Override public void print(){ System.out.println("Car of type :" + this.getType()); } }
MidSizeCar.java
public class MidSizeCar extends Car{ MidSizeCar(){ this.setType("Mid Size Car"); } @Override public void print(){ System.out.println("Car of type :" + this.getType()); } }
SmallCar.java
public class SmallCar extends Car{ SmallCar(){ this.setType("Small Car"); } @Override public void print(){ System.out.println("Car of type :" + this.getType()); } }
CarsPrototypes.java
import java.util.Map; import java.util.HashMap; public class CarsPrototypes { private static Map<Integer, Car> carsCache; public static void loadCache(){ Car sportsCar = new SportsCar(); Car luxuryCar = new LuxuryCar(); Car largeCar = new LargeCar(); Car midSizeCar = new MidSizeCar(); Car smallCar = new SmallCar(); carsCache = new HashMap<Integer, Car> (); carsCache.put(1, sportsCar); carsCache.put(2, luxuryCar); carsCache.put(3, largeCar); carsCache.put(4, midSizeCar); carsCache.put(5, smallCar); } public static Car getCar(int carId){ Car myCar = carsCache.get(carId); return myCar.clone(); } }
public class PrototypePatternDemo { public static void main(String args[]){ Car myCar; CarsPrototypes.loadCache(); myCar = CarsPrototypes.getCar(1); myCar.print(); myCar = CarsPrototypes.getCar(2); myCar.print(); myCar = CarsPrototypes.getCar(3); myCar.print(); myCar = CarsPrototypes.getCar(4); myCar.print(); myCar = CarsPrototypes.getCar(5); myCar.print(); } }
Output
Car of type :Sports Car Car of type :Luxury Car Car of type :Large Car Car of type :Mid Size Car Car of type :Small Car
No comments:
Post a Comment