Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


设计模式之工厂模式

设计模式 Java 大约 1689 字

简单工厂

由一个工厂对象决定创建出具体哪个类。

public class SimpleFactory {

    public Pizza createPizza(String type) {
        Pizza pizza = null;
        switch (type) {
            case "cheese":
                pizza = new CheesePizza();
                break;
            case "pepper":
                pizza = new PepperPizza();
                break;
            default:
                break;
        }
        return pizza;
    }

}

工厂方法

定义一个用于创建对象的抽象方法,由子类决定实例化具体的类,将对象的实例化推迟到子类。

public abstract class FactoryMethod {

    public abstract Pizza createPizza(String type);

    public static void main(String[] args) {

        String pizzaType = "cheese";

        Pizza pizza = null;
        if (pizzaType.equals("cheese")) {
            pizza = new CheeseFactoryMethod().createPizza(pizzaType);
        } else if (pizzaType.equals("pepper")) {
            pizza = new PepperFactoryMethod().createPizza(pizzaType);
        }
        System.out.println(pizza.toString());

    }

}

抽象工厂

  • 将简单工厂模式和工厂方法模式进行整合
  • 将工厂抽象成两层,抽象工厂和具体实现的工厂子类
  • 根据创建对象类型使用对应的工厂子类
  • 将单个的简单工厂类变成了工厂簇
public interface AbstractFactory {

    Pizza createPizza();

    static void main(String[] args) {
        PizzaFactory pizzaFactory = new PizzaFactory();
        pizzaFactory.create(new CheesePizzaFactory());
        Pizza pizza = pizzaFactory.abstractFactory.createPizza();
        System.out.println(pizza.toString());
    }

}

public class CheesePizzaFactory implements AbstractFactory{

    @Override
    public Pizza createPizza() {
        return new CheesePizza();
    }
}

public class PepperPizzaFactory implements AbstractFactory {
    @Override
    public Pizza createPizza() {
        return new PepperPizza();
    }
}
阅读 2077 · 发布于 2019-12-13

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批