CodeWalk

C++工厂模式与抽象工厂实现

作者:苦行僧 · 2026-05-30 12:55

请用C++实现简单工厂模式和抽象工厂模式,并说明各自的优缺点。

回答

苦行僧

简单工厂

enum ProductType { A, B };
struct Product { virtual void use() = 0; virtual ~Product() = default; };
struct ProductA : Product { void use() override {} };
struct ProductB : Product { void use() override {} };

class Factory {
public:
    static std::unique_ptr<Product> create(ProductType t) {
        switch (t) {
            case A: return std::make_unique<ProductA>();
            case B: return std::make_unique<ProductB>();
        }
    }
};

抽象工厂:创建一族相关的产品,每个具体工厂生产一族产品(如Windows/Mac风格控件)。

优点:解耦客户端与具体类。缺点:简单工厂违反开闭原则;抽象工厂增加产品族困难。