简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要用来解决对象创建的问题,使得客户端代码能够避免直接创建具体的产品实例,而是通过一个公共的工厂类来进行对象的实例化。在这个例子"CreateCar(简单工厂模式)"中,我们将探讨如何使用C++实现一个汽车工厂,该工厂可以生产不同品牌的汽车,如奥迪。
我们定义一个抽象的`Car`基类,它代表所有汽车的共同接口。这个接口通常包括一些通用的方法,如启动(start)、停止(stop)等:
```cpp
class Car {
public:
virtual void start() = 0;
virtual void stop() = 0;
// 其他通用方法...
};
```
接下来,我们为每个具体的品牌汽车创建一个派生类,如`AudiCar`:
```cpp
class AudiCar : public Car {
public:
void start() override {
// 实现奥迪车的启动逻辑...
}
void stop() override {
// 实现奥迪车的停止逻辑...
}
// 其他品牌特有的方法...
};
```
然后,我们创建一个`CarFactory`工厂类,它是简单工厂模式的核心。这个工厂负责根据用户需求返回特定品牌的汽车实例:
```cpp
class CarFactory {
public:
static std::unique_ptr<Car> createCar(std::string brand) {
if (brand == "Audi") {
return std::make_unique<AudiCar>();
} else {
throw std::runtime_error("Invalid brand");
}
}
};
```
在这个例子中,`createCar`函数接收一个字符串参数,表示客户想要的品牌。根据这个参数,工厂返回相应品牌的汽车对象。如果传入的不是已知品牌,工厂会抛出异常。
客户端代码可以这样使用工厂:
```cpp
int main() {
auto car = CarFactory::createCar("Audi");
car->start();
car->stop();
// ...
return 0;
}
```
简单工厂模式的优点在于它提供了封装性,隐藏了对象创建的细节,使得客户端代码更加简洁,易于维护。然而,它的缺点在于如果需要添加新的产品类型,就需要修改工厂类,这违反了开闭原则(对扩展开放,对修改关闭)。
在实际应用中,如果产品类型很多,或者有动态选择产品的需要,可能需要考虑使用更复杂的工厂模式,如工厂方法模式或抽象工厂模式。但作为设计模式的入门,简单工厂模式提供了一个很好的起点,帮助开发者理解如何利用模式来组织代码结构,提高代码的可复用性和可维护性。
评论0
最新资源