Sunday, 6 July 2014

Factory Design Pattern - Java

Factory Design Pattern

Factory Design Pattern works as per it's name. As one Factory can generate various types of items but of a specific category. Like, Car Factory ( Nissan Car Factory ) can create cars like, Micra, Sunny, Evalia but it can't create Duster. Because,Duster can be created by Renault Car Factory.



So, with the same concept, A company can create a various types of Employees. Like, Developer, Admin , Developer Manager. But, only Developer can be Dev Manager.




Here is the Complete example of creating the Company with all the Employee details.

Class Company.java
/**
 * Parent Class of all Class. Employee is Base class of all types of Employee.
 *
 * @author Hari
 *
 */
abstract class Employee {
 public abstract void getMyDetails();
}
/**
 * Admin is child class of the Employee class.
 *
 * @author Hari
 */
class Admin extends Employee {
 public void getMyDetails() {
  System.out.println("I'm admin");
 }
}
/**
 * Developer is another child class of Employee Class
 *
 * @author Hari
 */
class Developer extends Employee {
 public void getMyDetails() {
  System.out.println("I'm Developer");
 }
}
/**
 * DevManager is the Class derived from Developer.s
 *
 * @author Hari
 *
 */
class DevManager extends Developer {
 public void getMyDetails() {
  super.getMyDetails();
  System.out.println("I'm Manager");
 }
}
/**
 * Enum Type id defined to get the argument as specific type of the class
 *
 * @author Hari
 *
 */
enum EmployeeType {
 ADMIN, DEVELOPER, DEV_MANAGER
}
/**
 * Company Class is Factory. Company can create any type of the Employee.
 *
 * @author Hari
 *
 */
public class Company {
 /**
  * Method to create a Employee.
  *
  * @param employeeType
  * @return
  */
 public static Employee hireEmployee(EmployeeType employeeType) {
  Employee e = null;
  switch (employeeType) {
  case ADMIN:
   e = new Admin();
   break;
  case DEVELOPER:
   e = new Developer();
   break;
  case DEV_MANAGER:
   e = new DevManager();
   break;
  }
  return e;
 }
}