工厂方法模式 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(); // 豪华发动机轰鸣...
}
}
👉 总结:
抽象工厂模式 = 一个工厂生产 一系列相关产品(比如:车 + 发动机成套)。
这样保证了产品族的一致性(豪华车配豪华发动机,经济车配经济发动机)。
📌 对比总结
| 模式 | 工厂生产范围 | 使用场景 |
|---|---|---|
| 工厂方法模式 | 只生产 一个产品 | 需要解耦“单一产品”的创建逻辑 |
| 抽象工厂模式 | 生产 多个相关产品 | 需要保证“产品族”整体的一致性 |

浙公网安备 33010602011771号