返回

工厂模式:种类区分、原理介绍与代码演示

后端

简单工厂

简单工厂模式是最简单的一种工厂模式。它通过一个工厂类来创建对象,而无需关心具体对象的创建过程。简单工厂模式的优点是简单易用,缺点是缺乏灵活性。

工厂方法

工厂方法模式是一种更加灵活的工厂模式。它通过一个抽象工厂类来定义创建对象的接口,而具体的创建过程则由子类来实现。工厂方法模式的优点是灵活性强,缺点是增加了类的数量。

抽象工厂

抽象工厂模式是最抽象的一种工厂模式。它通过一个抽象工厂类来定义创建一系列相关对象的接口,而具体的创建过程则由子类来实现。抽象工厂模式的优点是灵活性最强,缺点是增加了类的数量。

三种工厂模式的比较

工厂模式 优点 缺点
简单工厂 简单易用 缺乏灵活性
工厂方法 灵活性强 增加了类的数量
抽象工厂 灵活性最强 增加了类的数量

代码示例

// 简单工厂模式
class SimpleFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ProductA();
            case "B":
                return new ProductB();
            default:
                throw new IllegalArgumentException("Invalid product type: " + type);
        }
    }
}

class ProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductA do something");
    }
}

class ProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductB do something");
    }
}

// 工厂方法模式
interface Factory {
    Product createProduct();
}

class FactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

class FactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

// 抽象工厂模式
interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

class ConcreteFactoryA implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ProductA();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB();
    }
}

class ConcreteFactoryB implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ProductA();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB();
    }
}

总结

工厂模式是一种非常重要的设计模式,它可以帮助我们创建更加灵活和可扩展的应用程序。工厂模式根据抽象程度可分为简单工厂、工厂方法和抽象工厂三种。每种模式都有其优缺点,我们可以根据具体的需求选择合适的工厂模式。