Factory method pattern: defines an interface for creating objects, but the subclass decides which class to instantiate. Factory methods delay class instantiation to subclasses.
Abstract factory pattern: provides an interface for creating a family of related or dependent objects without explicitly specifying specific classes.
Code implementation:
1. Simple factory (strictly non factory mode)
(1) Create a pizza abstract class
public abstract class Pizza {
public abstract void prepare();
public abstract void bake();
public abstract void cut();
public abstract void box();
}
(2) Inherit the abstract class of pizza and implement two classes
public class ClamPizza extends Pizza{
@Override
public void prepare() {
// TODO Auto-generated method stub
System.out.println("prepare clam pizza.");
}
@Override
public void bake() {
// TODO Auto-generated method stub
System.out.println("bake clam pizza.");
}
@Override
public void cut() {
// TODO Auto-generated method stub
System.out.println("cut clam pizza.");
}
@Override
public void box() {
// TODO Auto-generated method stub
System.out.println("box clam pizza.");
}
}
public class CheesePizza extends Pizza{
@Override
public void prepare() {
// TODO Auto-generated method stub
System.out.println("prepare cheese pizza.");
}
@Override
public void bake() {
// TODO Auto-generated method stub
System.out.println("bake cheese pizza.");
}
@Override
public void cut() {
// TODO Auto-generated method stub
System.out.println("cut cheese pizza.");
}
@Override
public void box() {
// TODO Auto-generated method stub
System.out.println("box cheese pizza.");
}
}
(3) Simple factory implementation
/**
* Simple factory mode (generally not factory mode)
*
*/
public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals("cheese")) {
pizza = new CheesePizza();
} else if (type.equals("clam")) {
pizza = new ClamPizza();
}
return pizza;
}
}