目录
一、简单工厂
简单工厂模式是一种设计模式,属于创建型模式,也被称为静态工厂方法模式。这种模式由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。简单工厂模式的核心是负责实现创建所有实例的内部逻辑。
二、模式组成
简单工厂模式由三部分组成:
组成 | 关系 | 作用 |
抽象产品(FactoryInterface) | 该类是父类、被子类(具体产品)所基础 | 提供具体参品的公共接口 |
具体产品(Audi\Bmw\Benz) | 抽象产品的子类,工厂的目标 | 产品的描述和实现 |
工厂(CarFactory) | 调用类 | 根据需求,从而实例化出相应的产品 |
三、创建方法及代码实现
注:本程序使用,通过一个工厂,传递不同的名称,实现不同汽车的创建,汽车类中对汽车的创建并没有详细的描述,意为描述出简单工厂的大概模式。
1、创建一个抽象类
创建一个抽象类,为具体产品提供一个公共的接口class FactoryInterface {
class FactoryInterface {
public:
virtual void print() = 0;
};
2、定义产品
定义出不同的产品类,该产品类继承共同的1种的抽象类
//奥迪工厂
class Audi:public FactoryInterface {
public:
virtual void print() {
std::cout << "Create Audi Factory" << std::endl;
}
};
//宝马工厂
class Bmw :public FactoryInterface {
public:
virtual void print() {
std::cout << "Create Bmw Factory" << std::endl;
}
};
//奔驰工厂
class Benz :public FactoryInterface {
public:
virtual void print() {
std::cout << "Create Benz Factory" << std::endl;
}
};
3、创建工厂
创建工厂,根据不同的需求,创建出不同的产品。
//工厂类
class CarFactory {
public:
static FactoryInterface* createCarFunc(std::string CarName) {
if (CarName == "Audi") {
return new Audi();
}
else if (CarName == "Bmw") {
return new Bmw();
}
else {
return new Benz();
}
}
};
4、调用工厂
通过主函数调用工厂,根据不同的参数,创建不同的产品。
int main()
{
CarFactory *fty = new CarFactory();//创建工厂对象
//根据抽象工厂创建汽车
FactoryInterface* car;
//指定工厂创建的汽车
car = fty->createCarFunc("Audi");
car->print();
delete car;
car = fty->createCarFunc("Bmw");
car->print();
delete car;
}
本程序运行结果
四、优缺
优点
- 工厂类包含必要的判断逻辑,可以决定在声明时候创建哪一个产品实例,客户端可以免除直接创建产品对象的职责,
- 简单工厂模式实现了对象的创建和使用的分离。
- 只需要传递正确的参数,无需传递具体细节
缺点
- 难以维护,工厂类职责过重,不方便维护
- 使用简单工厂模式必然会增加系统中类的个数,增加了系统的复杂性
- 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成无法形成基于继承的等级结构
五、应用场景
- 工厂类负责创建的对象比较少,由于创建的对象比较少,不会造成工厂方法中的业务逻辑太复杂。
- 只知道传入工厂类的参数,对于如何创建对象不关心。