Headfirst java design pattern factory pattern

Posted by liquorvicar on Sun, 12 Jan 2020 17:06:44 +0100

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;
    }

}