目录
工厂方法模式(Factory Method Pattern)是创建型模式的一种,用于创建对象而不暴露创建逻辑。它通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式让类的实例化延迟到了子类中。
工厂方法模式主要包括以下几个部分:
假设我们需要创建不同类型的披萨(Pizza),并且我们希望有一个工厂类来负责创建这些披萨。
- public interface Pizza {
- void prepare();
- void bake();
- void cut();
- void box();
- }
- public class CheesePizza implements Pizza {
- @Override
- public void prepare() {
- System.out.println("Preparing Cheese Pizza");
- }
-
- @Override
- public void bake() {
- System.out.println("Baking Cheese Pizza");
- }
-
- @Override
- public void cut() {
- System.out.println("Cutting Cheese Pizza");
- }
-
- @Override
- public void box() {
- System.out.println("Boxing Cheese Pizza");
- }
- }
-
- public class PepperoniPizza implements Pizza {
- @Override
- public void prepare() {
- System.out.println("Preparing Pepperoni Pizza");
- }
-
- @Override
- public void bake() {
- System.out.println("Baking Pepperoni Pizza");
- }
-
- @Override
- public void cut() {
- System.out.println("Cutting Pepperoni Pizza");
- }
-
- @Override
- public void box() {
- System.out.println("Boxing Pepperoni Pizza");
- }
- }
- public abstract class PizzaFactory {
- public abstract Pizza createPizza(String type);
- }
- public class SimplePizzaFactory extends PizzaFactory {
- @Override
- public Pizza createPizza(String type) {
- Pizza pizza = null;
- if ("cheese".equals(type)) {
- pizza = new CheesePizza();
- } else if ("pepperoni".equals(type)) {
- pizza = new PepperoniPizza();
- }
- return pizza;
- }
- }
- public class Client {
- public static void main(String[] args) {
- PizzaFactory factory = new SimplePizzaFactory();
-
- Pizza cheesePizza = factory.createPizza("cheese");
- cheesePizza.prepare();
- cheesePizza.bake();
- cheesePizza.cut();
- cheesePizza.box();
-
- Pizza pepperoniPizza = factory.createPizza("pepperoni");
- pepperoniPizza.prepare();
- pepperoniPizza.bake();
- pepperoniPizza.cut();
- pepperoniPizza.box();
- }
- }
与简单工厂模式相比,工厂方法模式有以下几个区别:
🎈 所谓扩展性好,意思是当我们有新产品时,我们可以再创建一个抽象工厂的子类,而不需要修改原来的子类。简单工厂就需要修改原来的工厂类来解决问题,破环了开闭原则。
当然了,简单工厂也可以不修改,你说你再建一个工厂再通过静态方法去做,可不可以呢?可以,但是它已经不叫做简单工厂方法了,简单工厂就是一个工厂!相当于你创建了多个工厂,但是这些工厂之间又没有逻辑联系,互相耦合,使得代码混乱。
所以,通过抽象工厂作为纽带,创建不同的子类工厂,就完美解决了这个问题。
工厂方法模式是一种非常实用的设计模式,它通过定义一个创建对象的接口,让子类决定实例化哪一个类。这种方式不仅提高了代码的灵活性和可扩展性,还遵循了开闭原则。在实际开发中,工厂方法模式可以广泛应用于需要创建多种相关对象的场景,尤其是在对象创建逻辑较为复杂的情况下。