思路一的实现思路如下
思路二的实现思路如下
工厂方法模式的实现思路如下
思路二相比思路一增加了程序的扩展性,当需要加入新的地区的披萨,方式二不需要改变原有的代码只需加新的地区披萨类和新的地区披萨订单类继承订单披萨类就行了,而方式一需要修改SimpleFactory里的代码。
方式三的代码实现如下:
四个pizza类
package factoryapproach;
public class BjCheesePizza extends Pizza{
@Override
public void prepare() {
System.out.println("加入北京奶酪");
}
}
package factoryapproach;
public class BjPepperPizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入北京辣椒");
}
}
package factoryapproach;
public class LdCheesePizza extends Pizza{
@Override
public void prepare() {
System.out.println("加入伦敦奶酪");
}
}
package factoryapproach;
public class LdPepperPizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入伦敦辣椒");
}
}
两个地区披萨订单类
package factoryapproach;
public class LdOrderPizza extends OrderPizza{
@Override
public Pizza create(String pizzaType) {
if(pizzaType.equals("cheese")){
return new LdCheesePizza();
}
if(pizzaType.equals("pepper")){
return new LdPepperPizza();
}
return null;
}
}
package factoryapproach;
public class BjOrderPizza extends OrderPizza {
@Override
public Pizza create(String pizzaType) {
if(pizzaType.equals("cheese")){
return new BjCheesePizza();
}
if(pizzaType.equals("pepper")){
return new BjPepperPizza();
}
return null;
}
}
OrderPizza类
package factoryapproach;
public abstract class OrderPizza {
public abstract Pizza create(String pizzaType);
}
客户端调用类
package factoryapproach;
public class Client {
public static void main(String[] args) {
OrderPizza order1 = new LdOrderPizza();
order1.create("cheese").prepare();
order1.create("cheese").bake();
order1.create("cheese").cut();
order1.create("cheese").box();
OrderPizza order2 = new BjOrderPizza();
order2.create("cheese").prepare();
order2.create("cheese").bake();
order2.create("cheese").cut();
order2.create("cheese").box();
}
}