工厂方法模式 vs 抽象工厂模式 的理解,异同对比,一文详解!

🚗 工厂方法模式 vs 抽象工厂模式

我们用一个 汽车生产 的例子来说明两者的区别。


1. 工厂方法模式(Factory Method)

特点:一个工厂负责生产某一类产品

👉 例子:
我们有一个 汽车工厂接口,不同的工厂只能生产一种型号的车。

// 产品接口
interface Car {
    void drive();
}

// 具体产品
class Sedan implements Car {
    public void drive() {
        System.out.println("开一辆轿车...");
    }
}

class Suv implements Car {
    public void drive() {
        System.out.println("开一辆SUV...");
    }
}

// 工厂接口
interface CarFactory {
    Car createCar();
}

// 具体工厂:生产轿车
class SedanFactory implements CarFactory {
    public Car createCar() {
        return new Sedan();
    }
}

// 具体工厂:生产SUV
class SuvFactory implements CarFactory {
    public Car createCar() {
        return new Suv();
    }
}

客户端使用:

public class Main {
    public static void main(String[] args) {
        CarFactory factory = new SedanFactory(); // 选择轿车工厂
        Car car = factory.createCar();
        car.drive(); // 输出:开一辆轿车...
    }
}

👉 总结
工厂方法模式 = 一个工厂生产 一种产品
客户端只依赖接口,不直接依赖具体产品类。


2. 抽象工厂模式(Abstract Factory)

特点:一个工厂负责生产一系列相关的产品

👉 例子:
一个汽车厂,不仅造 ,还提供 发动机。不同工厂生产的车和发动机是成套的。

// 汽车接口
interface Car {
    void drive();
}

// 发动机接口
interface Engine {
    void run();
}

// 具体产品:豪华系列
class LuxuryCar implements Car {
    public void drive() {
        System.out.println("开一辆豪华轿车...");
    }
}
class LuxuryEngine implements Engine {
    public void run() {
        System.out.println("豪华发动机轰鸣...");
    }
}

// 具体产品:经济系列
class EconomyCar implements Car {
    public void drive() {
        System.out.println("开一辆经济型轿车...");
    }
}
class EconomyEngine implements Engine {
    public void run() {
        System.out.println("经济型发动机启动...");
    }
}

// 抽象工厂
interface AbstractCarFactory {
    Car createCar();
    Engine createEngine();
}

// 豪华工厂
class LuxuryFactory implements AbstractCarFactory {
    public Car createCar() {
        return new LuxuryCar();
    }
    public Engine createEngine() {
        return new LuxuryEngine();
    }
}

// 经济工厂
class EconomyFactory implements AbstractCarFactory {
    public Car createCar() {
        return new EconomyCar();
    }
    public Engine createEngine() {
        return new EconomyEngine();
    }
}

客户端使用:

public class Main {
    public static void main(String[] args) {
        AbstractCarFactory factory = new LuxuryFactory(); // 选择豪华系列
        Car car = factory.createCar();
        Engine engine = factory.createEngine();

        car.drive();   // 开一辆豪华轿车...
        engine.run();  // 豪华发动机轰鸣...
    }
}

👉 总结
抽象工厂模式 = 一个工厂生产 一系列相关产品(比如:车 + 发动机成套)。
这样保证了产品族的一致性(豪华车配豪华发动机,经济车配经济发动机)。


📌 对比总结

模式 工厂生产范围 使用场景
工厂方法模式 只生产 一个产品 需要解耦“单一产品”的创建逻辑
抽象工厂模式 生产 多个相关产品 需要保证“产品族”整体的一致性
posted @ 2025-09-05 11:59  AlphaGeek  阅读(133)  评论(0)    收藏  举报