工厂方法

工厂方法使用继承;把对象的创建委托给子类,由子类决定实例化哪一个.

 就是将相同的方法放到一起。

Abstract Product factoryMethod(String type)

工厂方法 是抽象的;

必须返回一个产品对象;

必须传入一个类型,决定创建哪个对象;

 该方法是继承该类后,要实现的。

用工场方法模式修改工厂方法的例子:

createPizza放回PizzaStore里,不过声明为抽象方法,由具体继承的类实现。

修改后的PizzaStore类:

public abstract class PizzaStore {

    abstract Pizza createPizza(String item);

    public Pizza orderPizza(String type) {

       Pizza pizza = createPizza(type);

       System.out.println("--- Making a " + pizza.getName() + " ---");

       pizza.prepare();

       pizza.bake();

       pizza.cut();

       pizza.box();

       return pizza;

    }

}

继承PizzaStore的类,实现createPizza类,返回具体Pizza

public class ChicagoPizzaStore extends PizzaStore {

 

    Pizza createPizza(String item) {

           if (item.equals("cheese")) {

                  return new ChicagoStyleCheesePizza();

           } else if (item.equals("veggie")) {

                  return new ChicagoStyleVeggiePizza();

           } else if (item.equals("clam")) {

                  return new ChicagoStyleClamPizza();

           } else if (item.equals("pepperoni")) {

                  return new ChicagoStylePepperoniPizza();

           } else return null;

    }

}

工厂方法就是将类的创建交由子类完成,在产品和产品创建者间构建了一个平台。

和简单工厂的区别;简单工厂就是封装创建类的方法。不能更改正在创建的产品,而工厂方法提供了一格框架,可以动态的由子类决定如何创建产品。

工厂方法更适用于由更多的产品类别,每个类别又有不同的类型。需要实例化的产品具备不同的特性。