When
we want to return one sub-class object from multiple sub-classes using an
input, should use Factory design pattern. Factory class takes responsibility of
instantiation the class (We can return Singleton instance from static factory
method).
In
Factory pattern, we create object without exposing the creation logic to the
client and refer to newly created object using a common interface.
Example:
Coffee/Vending machine, give input from options and as per input coffee, lemon tea,
plain milk or hot water will be an output.
interface Drink {
void prepare();
}
class Coffee implements Drink {
@Override
public void prepare() {
System.out.println("Coffee is
prepared !!");
}
}
class LemonTea implements Drink {
@Override
public void prepare() {
System.out.println("Lemon Tea is
prepared !!");
}
}
class PlainWater implements Drink {
@Override
public void prepare() {
System.out.println("Plain Water
is prepared !!");
}
}
class VedingMachine {
public static Drink
getDrink(String str) {
if("PlainWater".equals(str)) {
return new PlainWater();
} else if("Coffee".equals(str)) {
return new Coffee();
} else if("LemonTea".equals(str)) {
return new LemonTea();
}
return null;
}
}
public class FactoryPatternTest {
public static void main(String[] args) {
Drink drink = VedingMachine.getDrink("Coffee");
drink.prepare();
}
}
Output:
Coffee
is prepared !!
Benefits of Factory
Method Pattern
Factory
Method Pattern provides approach to code for interface rather than
implementation and it provides abstraction between implementation and client
classes through inheritance.
Factory
Method Pattern allows the sub-classes to choose the type of objects to create.
We
can easily change the implementation of sub-class because client program is unaware
of this. It makes code more robust, less coupled and easy to extend (client
interacts solely with the resultant interface or abstract class).
Usage in JDK
java.util.Calendar,
ResourceBundle and NumberFormat getInstance() methods uses Factory pattern.
valueOf()
method in wrapper classes like Boolean, Integer etc.
Spring
and hibernate frameworks.
No comments:
Post a Comment