工厂模式
-
工厂模式(Factory Pattern):提供一个统一的接口来创建对象,隐藏对象的具体实现细节。
它是一种创建型设计模式,用于创建对象的过程不在客户端代码中直接实例化,而是通过一个工厂类来完成。工厂模式提供了一种创建对象的接口,让子类决定实例化哪个类。 -
工厂模式通常涉及以下几个角色:
- 抽象产品(Abstract Product):定义了产品的通用接口。可以是一个抽象类或接口。
- 具体产品(Concrete Product):实现抽象产品接口,是工厂模式真正创建的对象。
- 抽象工厂(Abstract Factory):声明了工厂方法,用于创建抽象产品的对象。
- 具体工厂(Concrete Factory):实现抽象工厂接口,并负责实例化具体产品。
下面是一个简单的示例,演示了工厂模式的基本结构:
下面展示一些 内联代码片
。
// 抽象产品
class Product {
public:
virtual void use() = 0;
};
// 具体产品
class ConcreteProduct : public Product {
public:
void use() override {
// 具体产品的使用逻辑
}
};
// 抽象工厂
class Factory {
public:
virtual Product* createProduct() = 0;
};
// 具体工厂
class ConcreteFactory : public Factory {
public:
Product* createProduct() override {
return new ConcreteProduct();
}
};
// 客户端代码
int main() {
Factory* factory = new ConcreteFactory();
Product* product = factory->createProduct();
product->use();
delete product;
delete factory;
return 0;
}
在上述示例中,抽象产品 Product 定义了产品的通用接口,具体产品 ConcreteProduct 实现了具体产品的功能。抽象工厂 Factory 定义了创建产品的接口,具体工厂 ConcreteFactory 实现了具体产品的创建。客户端通过工厂来获取产品对象,并使用该产品。
工厂模式具有以下优点:
将客户端代码与具体产品的创建过程解耦,使客户端代码更加灵活可扩展。
符合开闭原则,当需要添加新的产品时,只需要添加对应的具体产品和具体工厂,不需要修改现有代码。