图解
理论
将一个大的工厂抽象出来,然后每一个类都有一个对应的具体的工厂
缺点:
类的个数成倍增加(增加一个类,就要增加一个对应的工厂),从而导致类越来越多,增加了维护的成本
增加了系统的抽象性和理解难度
好处:
符合开闭原则
实现了对象创建和使用的分离
系统的可扩展性变得很好,无需修改接口和原类
使用场景:
客户端不知道他所需要的对象的类
抽象工厂类通过其子类来指定创建哪个对象
代码
#include <iostream>
using namespace std;
class abstractFruit {
public:
virtual void showName() = 0;
};
class Apple : public abstractFruit {
public:
void showName() override {
cout << "i am apple" << endl;
}
};
class Banana : public abstractFruit {
public:
void showName() override {
cout << "i am Banana" << endl;
}
};
// 抽象工厂
class AbstractFactory {
public:
virtual abstractFruit* CreateFruit() = 0;
};
//苹果工厂
class AppleFactory : public AbstractFactory {
public :
abstractFruit* CreateFruit() override {
return new Apple;
}
};
//香蕉工厂
class BananaFactory : public AbstractFactory {
public :
abstractFruit* CreateFruit() override {
return new Banana;
}
};
void test01() {
AbstractFactory * factory = nullptr;
abstractFruit* fruit = nullptr;
factory = new AppleFactory;
fruit = factory->CreateFruit();
fruit->showName();
delete fruit;
delete factory;
factory = new BananaFactory;
fruit = factory->CreateFruit();
fruit->showName();
delete fruit;
delete factory;
}
int main() {
test01();
return 0;
}