1 什么是工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将对象的实际创建延迟到子类中。这样,客户端代码使用工厂方法来创建对象,而不需要了解具体对象的创建细节,从而实现了对象的解耦和灵活性。
工厂方法模式的核心思想是将对象的创建和使用分开,通过一个抽象的工厂接口来定义对象的创建方法,具体的对象创建由子类工厂来实现。这样,当需要创建不同类型的对象时,只需添加新的工厂类即可,而不需要修改客户端使用的代码,符合开闭原则。
2 举个例子
假设我们正在开发一个汽车制造系统,其中有多个车型(如轿车、SUV、跑车等),每个车型都有不同的特点和构造过程。我们希望能够根据客户的需求来创建相应的车型对象。
首先,我们定义一个抽象的汽车接口 Car,其中包含了抽象的方法 drive:
class Car {
public:
virtual void drive() = 0;
};
然后,我们创建多个具体的汽车类,它们实现了汽车接口,并各自实现了 drive 方法:
class SedanCar : public Car {
public:
void drive() override {
cout << "Driving sedan car..." << endl;
}
};
class SUVCar : public Car {
public:
void drive() override {
cout << "Driving SUV car..." << endl;
}
};
class SportsCar : public Car {
public:
void drive() override {
cout << "Driving sports car..." << endl;
}
};
接下来,我们定义一个抽象的汽车工厂接口 CarFactory,其中包含了一个工厂方法 createCar:
class CarFactory {
public:
virtual Car* createCar() = 0;
virtual ~CarFactory() {}
};
然后,我们创建多个具体的汽车工厂类,它们实现了汽车工厂接口,分别负责创建相应的汽车对象:
class SedanCarFactory : public CarFactory {
public:
Car* createCar() override {
return new SedanCar();
}
};
class SUVCarFactory : public CarFactory {
public:
Car* createCar() override {
return new SUVCar();
}
};
class SportsCarFactory : public CarFactory {
public:
Car* createCar() override {
return new SportsCar();
}
};
最后,在客户端代码中,根据客户的需求来创建相应的汽车对象,而不需要了解具体的汽车类和工厂类:
int main() {
CarFactory* factory1 = new SedanCarFactory();
Car* sedanCar = factory1->createCar();
sedanCar->drive();
CarFactory* factory2 = new SUVCarFactory();
Car* suvCar = factory2->createCar();
suvCar->drive();
CarFactory* factory3 = new SportsCarFactory();
Car* sportsCar = factory3->createCar();
sportsCar->drive();
delete sedanCar;
delete suvCar;
delete sportsCar;
delete factory1;
delete factory2;
delete factory3;
return 0;
}
在上述示例中,我们定义了抽象的汽车接口 Car 和具体的汽车类 SedanCar、SUVCar、SportsCar。同时,我们还定义了抽象的汽车工厂接口 CarFactory 和具体的汽车工厂类 SedanCarFactory、SUVCarFactory、SportsCarFactory。客户端代码根据客户的需求选择相应的工厂,并通过工厂的工厂方法来创建相应的汽车对象。
3 总结
通过工厂方法模式,我们将对象的创建和使用解耦,使得客户端代码只需和抽象的工厂接口打交道,而不需要关心具体的对象创建过程,从而增加了代码的灵活性和可维护性。
标签:createCar,创建,模式,工厂,Car,CarFactory,public From: https://www.cnblogs.com/luoxiang/p/17824035.html