工厂方法模式-简单介绍01

工厂方法模式是一种创建型设计模式,它定义了一个接口,用于创建对象,但是由子类来决定该创建哪个类的实例。这个模式让一个类的实例化延迟到其子类。

在工厂方法模式中,创建对象的代码由一个称为“工厂”的对象负责,而不是由客户端直接创建。客户端只需要调用工厂的方法来创建对象,无需关心具体实现细节。

示例:
假设有一个披萨店需要提供各种口味的披萨。我们可以使用工厂方法模式来实现不同口味的披萨创建。

首先定义一个抽象的披萨类,以及不同口味的披萨:

public abstract class Pizza {
    
    
    public abstract void prepare();

    public void bake() {
    
    
        System.out.println("Bake for 25 minutes at 350");
    }

    public void cut() {
    
    
        System.out.println("Cutting the pizza into diagonal slices");
    }

    public void box() {
    
    
        System.out.println("Place pizza in official PizzaStore box");
    }
}

public class CheesePizza extends Pizza {
    
    
    public void prepare() {
    
    
        System.out.println("Preparing cheese pizza");
    }
}

public class PepperoniPizza extends Pizza {
    
    
    public void prepare() {
    
    
        System.out.println("Preparing pepperoni pizza");
    }
}

然后定义一个披萨工厂,它负责创建不同口味的披萨:

public abstract class PizzaStore {
    
    
    public final Pizza orderPizza(String type) {
    
    
        Pizza pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

    protected abstract Pizza createPizza(String type);
}

public class NYStylePizzaStore extends PizzaStore {
    
    
    protected Pizza createPizza(String type) {
    
    
        if (type.equals("cheese")) {
    
    
            return new NYStyleCheesePizza();
        } else if (type.equals("pepperoni")) {
    
    
            return new NYStylePepperoniPizza();
        }

        return null;
    }
}

public class ChicagoStylePizzaStore extends PizzaStore {
    
    
    protected Pizza createPizza(String type) {
    
    
        if (type.equals("cheese")) {
    
    
            return new ChicagoStyleCheesePizza();
        } else if (type.equals("pepperoni")) {
    
    
            return new ChicagoStylePepperoniPizza();
        }

        return null;
    }
}

现在我们可以在客户端代码中使用工厂方法来创建不同口味的披萨:

public class PizzaTestDrive {
    
    
    public static void main(String[] args) {
    
    
        PizzaStore nyStore = new NYStylePizzaStore();
        PizzaStore chicagoStore = new ChicagoStylePizzaStore();

        Pizza pizza = nyStore.orderPizza("cheese");
        System.out.println("Ethan ordered a " + pizza + "\n");

        pizza = chicagoStore.orderPizza("cheese");
        System.out.println("Joel ordered a " + pizza + "\n");
    }
}

这个代码示例演示了工厂方法模式的使用,使得客户端代码不需要知道具体要创建哪个类的实例,而是由具体的工厂类来负责实例化。

猜你喜欢

转载自blog.csdn.net/qq_43545600/article/details/131303686