public abstract class AbsFactory {
@Nullable
abstract Pizza createPizza(String orderType);
}
public class BJFactory extends AbsFactory {
@Override
@Nullable
Pizza createPizza(String orderType) {
Pizza pizza = null;
if ("cheese".equals(orderType)) {
pizza = new BJCheesePizza();
} else if ("pepper".equals(orderType)) {
pizza = new BJPepperPizza();
}
return pizza;
}
}
public class LDFactory extends AbsFactory {
@Override
@Nullable
Pizza createPizza(String orderType) {
Pizza pizza = null;
if ("cheese".equals(orderType)) {
pizza = new LDCheesePizza();
}
return pizza;
}
}
public abstract class Pizza {
protected String name;
public abstract void prepare();
public void bake() {
System.out.println(name + " 正在烘烤");
}
public void cut() {
System.out.println(name + " 正在剪切");
}
public void box() {
System.out.println(name + " 正在打包");
}
public Pizza setName(String name) {
this.name = name;
return this;
}
}
public class BJCheesePizza extends Pizza {
@Override
public void prepare() {
System.out.println("准备北京起司披萨的原材料");
}
}
public class BJPepperPizza extends Pizza {
@Override
public void prepare() {
System.out.println("正在准备北京胡椒披萨的原材料");
}
}
public class LDCheesePizza extends Pizza {
@Override
public void prepare() {
System.out.println("准备伦敦起司披萨材料");
}
}
@Setter
public class OrderPizza {
private AbsFactory factory;
public OrderPizza(AbsFactory absFactory) {
this.factory = absFactory;
}
public void setFactory() {
Pizza pizza = null;
String orderType = "";
do {
orderType = getOrderType();
pizza = factory.createPizza(orderType);
if (pizza != null) {
pizza.setName(orderType);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("订购失败");
break;
}
} while (true);
}
public String getOrderType() {
Scanner scanner = new Scanner(System.in);
return scanner.next();
}
}
public class PizzaMain {
public static void main(String[] args) {
new OrderPizza(new BJFactory());
}
}