CREATIONAL PATTERN.
Factory pattern deals with encapsulating logic for creation of objects. Suppose in banking system banker want to provide the passbook to new customer. In this case surely passbooks are not created in every branch of bank but manufacturing of passbooks would be carried out by factories & dispatched to branches on request. In this business model, all operations & logistics are managed by factories for passbooks production & branches are totally unaware or not interested to know how factory manage it. In this case if want to modify construction of object, we will have to change only factory class, not other classes like banker or customer

Passbook.java
public class Passbook {
private String color;
private int pageSize;
public Passbook(String color, int pageSize) {
// TODO Auto-generated constructor stub
this.color = color;
this.pageSize=pageSize;
}
public String getColor() {
return color;
}
public int getPageSize() {
return pageSize;
}
}
PassbookFactory.java
import java.util.HashMap;
import java.util.Map;
public class PassbookFactory {
private static Map colorCodeMap;
private static Map sizeCodeMap;
public PassbookFactory() {
if(colorCodeMap==null){
colorCodeMap = new HashMap();
colorCodeMap.put(1,"Orange");
colorCodeMap.put(2,"brown");
colorCodeMap.put(3,"Gray");
colorCodeMap.put(4,"Black");
colorCodeMap.put(5,"White");
}
if(sizeCodeMap==null){
sizeCodeMap = new HashMap();
sizeCodeMap.put("small",50);
sizeCodeMap.put("medium",100);
sizeCodeMap.put("large",200);
}
}
public Passbook createPassbook(int colorCode, String size){
String requestedColor = colorCodeMap.containsKey(colorCode)?
(String)colorCodeMap.get(colorCode):
(String)colorCodeMap.get(5);
int requestedPageSize = sizeCodeMap.containsKey(size)
?(int)sizeCodeMap.get(size)
:(int)sizeCodeMap.get("small");
Passbook pbook = new Passbook(requestedColor,requestedPageSize);
return pbook;
}
}
Banker.java
public class Banker {
public Banker() {
// TODO Auto-generated constructor stub
}
}
FactoryPatternMain.java
import java.util.Scanner;
public class FactoryPatternMain {
public FactoryPatternMain() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner inputStream = new Scanner(System.in);
PassbookFactory pbFactory = new PassbookFactory();
System.out.println("enter color code (options : 1,2,3,4,5) :");
int colorCode = inputStream.nextInt();
System.out.println("enter passbook size (options : small, medium, large)");
String passbookSize = inputStream.next().trim();
Passbook passbookGranted = pbFactory.createPassbook(colorCode, passbookSize);
System.out.println("You have been provided passbook which has color ::"+ passbookGranted.getColor()+", with pageSize::"+passbookGranted.getPageSize());
}
}
Output
