java设计模式(八):抽象工厂模式

 需求还是上一个需求

设计思路如下

抽象工厂实际就是简单工厂和工厂方法模式的结合,抽象工厂模式不仅可以创造Pizza,实际还可以创造面包等等,和工厂方法模式由于是继承的原因只能创造pizza一种商品,这就是他们最大的区别。

代码如下

4个pizza类

package abstractfactory;


public class BjCheesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入北京奶酪");
    }
}

package abstractfactory;

public class BjPepperPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入北京辣椒");
    }
}

package abstractfactory;

public class LdCheesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入伦敦奶酪");
    }
}

package abstractfactory;

public class LdPepperPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("加入伦敦辣椒");
    }
}

3个工厂类

package abstractfactory;

public interface AbstractFactory {
    public abstract Pizza create(String pizzaType);
}

package abstractfactory;

public class LdPizzaFactory implements AbstractFactory {

    @Override
    public Pizza create(String pizzaType) {
        if(pizzaType.equals("cheese")){
            return new LdCheesePizza();
        }
        if(pizzaType.equals("pepper")){
            return new LdPepperPizza();
        }
        return null;
    }
}

package abstractfactory;

public class BjPizzaFactory implements AbstractFactory {
    @Override
    public Pizza create(String pizzaType) {
        if(pizzaType.equals("cheese")){
            return new BjCheesePizza();
        }
        if(pizzaType.equals("pepper")){
            return new BjPepperPizza();
        }
        return null;
    }
}

OrderPizza类

package abstractfactory;

public class OrderPizza {
    AbstractFactory abs;
    String pizzaType ;
    public OrderPizza(AbstractFactory abs,String pizzaType){
        this.abs = abs;
        this.pizzaType = pizzaType;
    }
    public Pizza getPizza(){
        return abs.create(pizzaType);
    }
}

Client 类

package abstractfactory;

public class Client {
    public static void main(String[] args) {
       OrderPizza orderPizza = new OrderPizza(new LdPizzaFactory(),"cheese");
       Pizza pizza = orderPizza.getPizza();
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39046786/article/details/113663866