简单工厂模式是软件设计模式中的一种结构型模式,它的主要目的是提供一个统一的接口,用于创建一组相关的或相互依赖的对象,而无需指定它们的具体类。在这个例子中,我们将通过C++语言来理解如何实现这个模式。
在C++中,简单工厂模式通常包括三个主要角色:工厂类(Factory)、产品接口(Product)以及具体的产品类(Concrete Product)。在这个以创建不同子公司为例的情境中,我们可以假设有一个`Company`基类作为产品接口,代表各种类型的子公司,如`TechCompany`、`FinanceCompany`等作为具体的产品类。
我们定义`Company`基类,它可能包含一些共有的属性和方法,比如公司的名称、类型和运行业务的抽象方法:
```cpp
class Company {
public:
virtual ~Company() {}
virtual void runBusiness() = 0; // 运行业务的抽象方法
std::string companyName; // 公司名称
std::string companyType; // 公司类型
};
```
然后,我们为不同的子公司创建具体的产品类,如`TechCompany`和`FinanceCompany`,继承自`Company`并实现`runBusiness`方法:
```cpp
class TechCompany : public Company {
public:
TechCompany(std::string name) : companyName(name), companyType("Tech") {}
void runBusiness() override { std::cout << "Tech company " << companyName << " is developing software." << std::endl; }
};
class FinanceCompany : public Company {
public:
FinanceCompany(std::string name) : companyName(name), companyType("Finance") {}
void runBusiness() override { std::cout << "Finance company " << companyName << " is managing investments." << std::endl; }
};
```
接下来,我们创建工厂类`CompanyFactory`,它是简单工厂模式的核心,负责根据输入条件(如公司类型)创建相应的子公司实例:
```cpp
class CompanyFactory {
public:
static std::unique_ptr<Company> createCompany(std::string type) {
if (type == "Tech")
return std::make_unique<TechCompany>("New Tech Company");
else if (type == "Finance")
return std::make_unique<FinanceCompany>("New Finance Company");
else
throw std::runtime_error("Invalid company type.");
}
};
```
在这个例子中,`createCompany`函数根据传入的`type`参数来决定创建哪种类型的子公司,并返回一个指向相应子公司的智能指针。这样,客户端代码只需知道要创建哪种类型的子公司,而无需了解实际的创建过程。
客户端可以使用`CompanyFactory`来创建子公司,如下所示:
```cpp
int main() {
auto techCompany = CompanyFactory::createCompany("Tech");
techCompany->runBusiness();
auto financeCompany = CompanyFactory::createCompany("Finance");
financeCompany->runBusiness();
return 0;
}
```
这个简单的C++实现展示了如何运用简单工厂模式来简化对象的创建过程。通过将创建逻辑封装在工厂类中,客户端代码可以更加关注于业务逻辑,而不是对象的实例化细节。这种模式有助于提高代码的可维护性和可扩展性,因为添加新的子公司类型时,只需要修改工厂类,而无需改动客户端代码。