工厂模式优化:代码实例与面向接口编程

需积分: 19 5 下载量 61 浏览量 更新于2024-08-23 收藏 1.16MB PPT 举报
在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`的其余部分。这种设计遵循了面向接口编程的原则,提高了代码的灵活性和可扩展性,减少了维护复杂性和错误风险。工厂模式在处理复杂的对象创建流程,尤其是涉及多种类型的系统中,显示出了强大的优势。