工厂方法模式详细介绍

简介: 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在工厂类中的方式,使得客户端代码无需直接依赖具体的类来创建对象。

工厂方法模式的主要目的是将对象的创建和使用分离,通过引入工厂类来创建对象,从而降低了客户端代码与具体类之间的耦合度,提高了代码的可维护性和可扩展性。

工厂方法模式的核心思想是定义一个抽象的工厂接口,该接口声明了一个用于创建对象的方法,具体的对象创建逻辑由实现该接口的具体工厂类来实现。客户端代码通过调用工厂类的方法来获取对象,而无需关心具体的对象创建过程。

下面以一个简单的示例来详细介绍工厂方法模式的使用:

假设有一个披萨店,它可以制作不同种类的披萨,如芝士披萨、蔬菜披萨等。我们可以使用工厂方法模式来实现披萨的创建过程。

首先,定义一个抽象的披萨类 Pizza,它包含披萨的一些基本属性和方法。

public abstract class Pizza {
    protected String name;
    protected String dough;
    protected String sauce;
    public void prepare() {
        System.out.println("Preparing " + name);
        System.out.println("Tossing dough...");
        System.out.println("Adding sauce...");
    }
    public void bake() {
        System.out.println("Baking " + name);
    }
    public void cut() {
        System.out.println("Cutting " + name);
    }
    public void box() {
        System.out.println("Boxing " + name);
    }
    public String getName() {
        return name;
    }
}

然后,定义具体的披萨类,如芝士披萨和蔬菜披萨。

public class CheesePizza extends Pizza {
    public CheesePizza() {
        name = "Cheese Pizza";
        dough = "Regular Crust";
        sauce = "Marinara Pizza Sauce";
    }
}
public class VeggiePizza extends Pizza {
    public VeggiePizza() {
        name = "Veggie Pizza";
        dough = "Thin Crust";
        sauce = "Tomato Sauce";
    }
}

接下来,定义一个抽象的披萨工厂类 PizzaFactory,它包含一个用于创建披萨对象的方法 createPizza()

public abstract class PizzaFactory {
    public abstract Pizza createPizza(String type);
    public Pizza orderPizza(String type) {
        Pizza pizza = createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
}

最后,定义具体的披萨工厂类,如芝士披萨工厂和蔬菜披萨工厂。

public class CheesePizzaFactory extends PizzaFactory {
    public Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new CheesePizza();
        } else {
            return null;
        }
    }
}
public class VeggiePizzaFactory extends PizzaFactory {
    public Pizza createPizza(String type) {
        if (type.equals("veggie")) {
            return new VeggiePizza();
        } else {
            return null;
        }
    }
}

使用工厂方法模式的客户端代码如下:

public class PizzaStore {
    public static void main(String[] args) {
        PizzaFactory cheesePizzaFactory = new CheesePizzaFactory();
        Pizza cheesePizza = cheesePizzaFactory.orderPizza("cheese");
        System.out.println("Ordered a " + cheesePizza.getName());
        PizzaFactory veggiePizzaFactory = new VeggiePizzaFactory();
        Pizza veggiePizza = veggiePizzaFactory.orderPizza("veggie");
        System.out.println("Ordered a " + veggiePizza.getName());
    }
}

运行上述代码,输出结果如下:

Preparing Cheese Pizza
Tossing dough...
Adding sauce...
Baking Cheese Pizza
Cutting Cheese Pizza
Boxing Cheese Pizza
Ordered a Cheese Pizza
Preparing Veggie Pizza
Tossing dough...
Adding sauce...
Baking Veggie Pizza
Cutting Veggie Pizza
Boxing Veggie Pizza
Ordered a Veggie Pizza

从上述示例可以看出,工厂方法模式通过引入工厂类来创建对象,客户端代码只需调用工厂类的方法即可获取对象,无需关心具体的对象创建过程。这样可以降低客户端代码与具体类之间的耦合度,提高了代码的可维护性和可扩展性。

总结来说,工厂方法模式是一种创建型设计模式,它通过引入工厂类来创建对象,将对象的创建和使用分离,降低了客户端代码与具体类之间的耦合度。工厂方法模式适用于对象的创建过程比较复杂,或者需要根据不同的条件创建不同的对象的情况。

目录
相关文章
|
6月前
|
Java API 数据库
工厂方法模式
工厂方法模式
37 0
|
设计模式 C++
2023-6-10-第一式工厂方法模式
2023-6-10-第一式工厂方法模式
81 0
|
6月前
|
C#
C#简单工厂模式
C#简单工厂模式
85 0
|
设计模式 监控 uml
剖析工厂方法模式、从开电脑店开始
工厂类负责把实例化类时,复杂的过程透明化,同时避免大量实例化类的重复代码的出现。
剖析工厂方法模式、从开电脑店开始
|
设计模式 算法 搜索推荐
工厂方法模式的两个极端
概念:是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
|
设计模式 关系型数据库 程序员
简单工厂模式、工厂模式、抽象工厂模式
简单工厂模式、工厂模式、抽象工厂模式
135 2
简单工厂模式、工厂模式、抽象工厂模式
简单的工厂模式和工厂方法模式
简单的工厂模式和工厂方法模式
|
设计模式
我学会了,工厂方法模式
工厂方法模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
86 0
我学会了,工厂方法模式