C++工厂模式与抽象工厂实现
请用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风格控件)。
优点:解耦客户端与具体类。缺点:简单工厂违反开闭原则;抽象工厂增加产品族困难。