工厂模式:一个工厂只生产一种产品
抽象工厂模式:一个工厂生产一类产品
#include <iostream>
using namespace std;
//抽象产品类
class FruitObject
{
public:
virtual void getFruit() = 0;
};
//抽象工厂类
class FactoryObject
{
public:
virtual FruitObject *createApple() = 0;
virtual FruitObject *createPear() = 0;
};
//具体产品类
class sourthApple : public FruitObject
{
public:
void getFruit()
{
cout << "恭喜你得到了一个南方苹果" << endl;
}
};
class northApple : public FruitObject
{
public:
void getFruit()
{
cout << "恭喜你得到了一个北方苹果" << endl;
}
};
class sourthPear : public FruitObject
{
public:
void getFruit()
{
cout << "恭喜你得到了一个南方甜梨" << endl;
}
};
class northPear : public FruitObject
{
public:
void getFruit()
{
cout << "恭喜你得到了一个北方甜梨" << endl;
}
};
//具体工厂类
class sourthFactory : public FactoryObject
{
public:
FruitObject *createApple()
{
return new sourthApple;
}
FruitObject *createPear()
{
return new sourthPear;
}
};
class northFactory : public FactoryObject
{
public:
FruitObject *createApple()
{
return new northApple;
}
FruitObject *createPear()
{
return new northPear;
}
};
int main()
{
FactoryObject *faco = nullptr;
FruitObject *fruo = nullptr;
faco = new northFactory;
fruo = faco->createApple();
fruo->getFruit();
delete fruo;
fruo = faco->createPear();
fruo->getFruit();
delete fruo;
delete faco;
faco = new sourthFactory;
fruo = faco->createApple();
fruo->getFruit();
delete fruo;
fruo = faco->createPear();
fruo->getFruit();
delete fruo;
delete faco;
return 0;
}
个人理解:抽象工厂确实不太符合开闭原则,以上述案例说下,如果以后增加新的水果 香蕉 如果需要符合抽象工厂类,则么需要在抽象工厂类中增加 创建香蕉的 纯虚函数。