在Java编程中,工厂设计模式是一种常用的软件设计模式,它解决的是对象创建问题,特别是当需要隐藏对象的创建逻辑,以及在系统中引入变化和扩展性时。工厂模式的核心思想是将对象的创建过程从客户端代码中解耦,从而使代码更加灵活和易于维护。
修改后的代码片段展示了如何使用工厂模式来实现这一目标。`Pizza orderPizza(String type)` 方法接收一个字符串类型的参数`type`,表示客户订购的披萨类型。根据`type`的不同,工厂模式通过一系列条件语句创建相应的`Pizza`子类实例,如`CheesePizza`、`GreekPizza`或`PepperoniPizza`。这些子类都实现了共同的`Pizza`接口,确保了面向接口编程的原则,而非面向具体实现。
问题的关键在于代码中频繁出现的`new Pizza()`,这会导致代码与具体的披萨类紧密耦合,使得扩展新类型变得困难。在面向对象设计原则中,应该尽可能减少这种耦合,将变化部分(即披萨种类)和固定部分(创建过程)分开。为此,可以采用工厂类(如`PizzaFactory`)来负责创建披萨实例,而不是直接在`PizzaStore`类中进行实例化。
例如,可以创建一个`PizzaFactory`类,它包含一个根据`type`返回相应披萨类的静态方法:
```java
public class PizzaFactory {
public static Pizza createPizza(String type) {
if (type.equals("cheese")) {
return new CheesePizza();
} else if (type.equals("greek")) {
return new GreekPizza();
} else if (type.equals("pepperoni")) {
return new PepperoniPizza();
}
// 添加更多类型的披萨创建逻辑...
}
}
// 在PizzaStore类中
public class PizzaStore {
public Pizza orderPizza(String type) {
return PizzaFactory.createPizza(type);
}
}
```
这样,当需要添加新的披萨类型时,只需要在`PizzaFactory`类中添加对应逻辑,而不会影响到`PizzaStore`的其余部分。这种设计遵循了面向接口编程的原则,提高了代码的灵活性和可扩展性,减少了维护复杂性和错误风险。工厂模式在处理复杂的对象创建流程,尤其是涉及多种类型的系统中,显示出了强大的优势。