工厂模式是一种常用的设计模式,它主要用于创建对象。工厂模式提供了一种通用的接口来创建对象,使得客户端无需关心具体实现的细节。在本文中,我们将从多个角度讨论工厂模式,着重介绍它的实现方式、优缺点以及应用场景。
一、工厂模式的实现方式
工厂模式的主要实现方式有三种:简单工厂模式、工厂方法模式和抽象工厂模式。
1. 简单工厂模式
简单工厂模式也称为静态工厂模式,它通过一个工厂类来创建具体的产品实例。客户端使用工厂类创建实例时,只需要传入对应的参数即可。下面是一个简单工厂模式的示例:
```
class Product{
public:
virtual void func() = 0;
};
class ProductA : public Product{
public:
void func() override {
cout << "ProductA func" << endl;
}
};
class ProductB : public Product{
public:
void func() override {
cout << "ProductB func" << endl;
}
};
class Factory{
public:
static unique_ptr
switch (type){
case 0:
return make_unique
case 1:
return make_unique
default:
break;
}
}
};
```
2. 工厂方法模式
工厂方法模式也称为多态工厂模式,它将工厂类抽象出来,每个具体产品类都对应一个工厂类。客户端使用具体产品类的对应工厂类创建实例。下面是一个工厂方法模式的示例:
```
class Product{
public:
virtual void func() = 0;
};
class ProductA : public Product{
public:
void func() override {
cout << "ProductA func" << endl;
}
};
class ProductB : public Product{
public:
void func() override {
cout << "ProductB func" << endl;
}
};
class Factory{
public:
virtual unique_ptr
};
class FactoryA : public Factory{
public:
unique_ptr
return make_unique
}
};
class FactoryB : public Factory{
public:
unique_ptr
return make_unique
}
};
```
3. 抽象工厂模式
抽象工厂模式也称为工厂族模式,它将每个具体工厂类作为一个工厂族,每个工厂族负责创建多个产品族中的一个或多个产品。客户端使用工厂族创建实例,而不是直接使用具体产品类或工厂类。下面是一个抽象工厂模式的示例:
```
class ProductA{
public:
virtual void func() = 0;
};
class ProductA1 : public ProductA{
public:
void func() override {
cout << "ProductA1 func" << endl;
}
};
class ProductA2 : public ProductA{
public:
void func() override {
cout << "ProductA2 func" << endl;
}
};
class ProductB{
public:
virtual void func() = 0;
};
class ProductB1 : public ProductB{
public:
void func() override {
cout << "ProductB1 func" << endl;
}
};
class ProductB2 : public ProductB{
public:
void func() override {
cout << "ProductB2 func" << endl;
}
};
class Factory{
public:
virtual unique_ptr
virtual unique_ptr
};
class Factory1 : public Factory{
public:
unique_ptr
return make_unique
}
unique_ptr
return make_unique
}
};
class Factory2 : public Factory{
public:
unique_ptr
return make_unique
}
unique_ptr
return make_unique
}
};
```
二、工厂模式的优缺点
1. 优点
(1) 工厂模式实现了对象的创建和使用分离,降低了客户端的耦合度,使得程序更易于维护和扩展。
(2) 工厂模式可以隐藏具体实现的细节,降低了客户端的复杂度,更易于使用。
(3) 工厂模式可以实现一些高级的编程技巧,例如依赖倒置、开闭原则等。
2. 缺点
(1) 工厂模式增加了代码的复杂度,需要创建多个类和接口。
(2) 工厂模式存在创建过程和使用过程的耦合,如果一个类的构造函数中需要传入工厂类的对象,那么这个类的使用必须要依赖于工厂类的实现。
三、工厂模式的应用场景
1. 实例化对象需要复杂的操作,例如数据库连接等。
2. 需要创建一组相互依赖的对象。
3. 客户端不需要关心对象的创建过程,只需要调用工厂类的函数创建实例即可。
4. 需要解耦客户端和具体实现的代码。
扫码咨询 领取资料