需求还是上一个需求
设计思路如下
抽象工厂实际就是简单工厂和工厂方法模式的结合,抽象工厂模式不仅可以创造Pizza,实际还可以创造面包等等,和工厂方法模式由于是继承的原因只能创造pizza一种商品,这就是他们最大的区别。
代码如下
4个pizza类
package abstractfactory;
public class BjCheesePizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入北京奶酪");
}
}
package abstractfactory;
public class BjPepperPizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入北京辣椒");
}
}
package abstractfactory;
public class LdCheesePizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入伦敦奶酪");
}
}
package abstractfactory;
public class LdPepperPizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入伦敦辣椒");
}
}
3个工厂类
package abstractfactory;
public interface AbstractFactory {
public abstract Pizza create(String pizzaType);
}
package abstractfactory;
public class LdPizzaFactory implements AbstractFactory {
@Override
public Pizza create(String pizzaType) {
if(pizzaType.equals("cheese")){
return new LdCheesePizza();
}
if(pizzaType.equals("pepper")){
return new LdPepperPizza();
}
return null;
}
}
package abstractfactory;
public class BjPizzaFactory implements AbstractFactory {
@Override
public Pizza create(String pizzaType) {
if(pizzaType.equals("cheese")){
return new BjCheesePizza();
}
if(pizzaType.equals("pepper")){
return new BjPepperPizza();
}
return null;
}
}
OrderPizza类
package abstractfactory;
public class OrderPizza {
AbstractFactory abs;
String pizzaType ;
public OrderPizza(AbstractFactory abs,String pizzaType){
this.abs = abs;
this.pizzaType = pizzaType;
}
public Pizza getPizza(){
return abs.create(pizzaType);
}
}
Client 类
package abstractfactory;
public class Client {
public static void main(String[] args) {
OrderPizza orderPizza = new OrderPizza(new LdPizzaFactory(),"cheese");
Pizza pizza = orderPizza.getPizza();
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
}