Intent
Define an interface for creating an object, but let sub classes decide
which class to instantiate. Factory Method lets a class defer instantiate to sub classes.
Also Known as
Virtual Constructor
Applicability
Use the Factory Method pattern when
· a class can't anticipate the class of objects it must create.
· a class wants its sub classes to specify the objects it creates.
· classes delegate responsibility to one of several helper sub classes, and
you want to localize the knowledge of which helper subclass is the delegate.
Structure
Participant
Product (Document)
o defines the interface of objects the factory method creates.
· Creator (Application)
Creator may also define a default implementation of the factory
method that returns a default Concrete Product object.
Concrete Product.
Related Pattern
Abstract Factory.
Template.
Prototypes.
Class Diagram
Program
====================Interface for creating product===========
package LangageCountry;
/**
*
* @author Sonu
*/
public interface Country {
String curruncy();
String date();
String percentage();
}
===================concrete class ====================
package LangageCountry;
import java.text.DateFormat;
import java.util.Currency;
import java.util.Date;
import java.util.Locale;
import javax.swing.JOptionPane;
/**
*
* @author Sonu
*/
public class INDIA implements Country{
@Override
public String curruncy()
{
Currency c=Currency.getInstance(Locale.ITALY); // at this place you can use Locale.india
return ""+c;
}
@Override
public String date()
{
Date date = new Date();
DateFormat df = DateFormat.getDateInstance(1,Locale.ITALY);
String str= df.format(date);
return ""+str;
}
@Override
public String percentage() {
return "percentage of india";
}
}
====================Concrete class ====================
package LangageCountry;
import java.text.DateFormat;
import java.util.Currency;
import java.util.Date;
import java.util.Locale;
import javax.swing.JOptionPane;
/**
*
* @author Sonu
*/
class JAPAN implements Country{
@Override
public String curruncy() {
Currency c = Currency.getInstance(Locale.JAPAN);
return ""+c;
}
@Override
public String date() {
Date d = new Date();
DateFormat df = DateFormat.getDateInstance(1,Locale.JAPAN);
String str=df.format(d);
return ""+str;
}
@Override
public String percentage() {
return "Parcentage of japan";
}
}
package LangageCountry;
import java.text.DateFormat;
import java.time.Instant;
import java.util.Currency;
import java.util.Date;
import java.util.Locale;
import javax.swing.JOptionPane;
/**
*
* @author Sonu
*/
class USA implements Country{
@Override
public String curruncy() {
Currency c = Currency.getInstance(Locale.US);
return ""+c;
}
@Override
public String date() {
Date date = new Date();
DateFormat d=DateFormat.getDateInstance(1,Locale.US);
String s=d.format(date);
return ""+s;
}
@Override
public String percentage() {
return "Percentage of usa";
}
}
=================The main class =======================
package LangageCountry;
import java.util.Scanner;
/**
*
* @author Sonu
*/
public class CreateCountry {
public static void main(String []args)
{
System.out.println("Enter Number 1 for India");
System.out.println("Enter Number 2 for Japan");
System.out.println("Enter Number 3 for Usa");
Scanner s = new Scanner(System.in);
int i= s.nextInt();
Country c = CountryFactory.getCountry(i);
System.out.println("Curruncy : " + c.curruncy());
System.out.println("Date : " + c.date());
System.out.println("Precentage:"+c.percentage());
}
}
==================== output =========================