汇总目录请点击访问:《设计模式目录汇总》 喜欢内容的话欢迎关注、点赞、收藏!感谢支持,祝大家祉猷并茂,顺遂无虞!
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,定义一个创建对象的接口,但让子类决定要实例化的具体类。通过这种方式,工厂方法模式将对象的实例化推迟到子类。
工厂方法模式由以下几个部分组成:
#include <iostream>
#include <memory>
// 抽象产品
class Product {
public:
virtual void use() = 0;
virtual ~Product() {}
};
// 具体产品 A
class ProductA : public Product {
public:
void use() override {
std::cout << "Using Product A" << std::endl;
}
};
// 具体产品 B
class ProductB : public Product {
public:
void use() override {
std::cout << "Using Product B" << std::endl;
}
};
// 抽象工厂
class Factory {
public:
virtual std::unique_ptr<Product> createProduct() = 0;
virtual ~Factory() {}
};
// 具体工厂 A
class FactoryA : public Factory {
public:
std::unique_ptr<Product> createProduct() override {
return std::make_unique<ProductA>();
}
};
// 具体工厂 B
class FactoryB : public Factory {
public:
std::unique_ptr<Product> createProduct() override {
return std::make_unique<ProductB>();
}
};
// 客户端代码
int main() {
std::unique_ptr<Factory> factory = std::make_unique<FactoryA>();
auto product = factory->createProduct();
product->use();
factory = std::make_unique<FactoryB>();
product = factory->createProduct();
product->use();
return 0;
}
using System;
// 抽象产品
public abstract class Product {
public abstract void Use();
}
// 具体产品 A
public class ProductA : Product {
public override void Use() {
Console.WriteLine("Using Product A");
}
}
// 具体产品 B
public class ProductB : Product {
public override void Use() {
Console.WriteLine("Using Product B");
}
}
// 抽象工厂
public abstract class Factory {
public abstract Product CreateProduct();
}
// 具体工厂 A
public class FactoryA : Factory {
public override Product CreateProduct() {
return new ProductA();
}
}
// 具体工厂 B
public class FactoryB : Factory {
public override Product CreateProduct() {
return new ProductB();
}
}
// 客户端代码
class Program {
static void Main(string[] args) {
Factory factory = new FactoryA();
Product product = factory.CreateProduct();
product.Use();
factory = new FactoryB();
product = factory.CreateProduct();
product.Use();
}
}
参数化工厂:通过传递参数决定创建哪种产品,减少具体工厂类的数量。
示例:
public class ParameterizedFactory : Factory {
public override Product CreateProduct(string type) {
return type switch {
"A" => new ProductA(),
"B" => new ProductB(),
_ => throw new ArgumentException("Invalid type")
};
}
}
结合简单工厂:将简单工厂作为抽象工厂的默认实现,用于处理常见或不复杂的实例化逻辑。
与依赖注入结合:通过 DI 容器动态注入具体工厂,简化复杂产品族的管理。
欢迎关注、点赞、收藏!更多系列内容可以点击专栏目录订阅,感谢支持,再次祝大家祉猷并茂,顺遂无虞!
若将文章用作它处,请一定注明出处,商用请私信联系我!