抽象工厂模式(AbstractFactory)和工厂模式的区别在于抽象工厂可以生产一个产品族。
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。
AbstractFactory.h
#pragma once
#include<iostream>
#include<string>
class Fruit // 创建水果类的抽象接口类
{
public:
virtual Fruit* getFruit() = 0;
private:
protected:
};
class Banana :public Fruit
{
public:
Fruit * getFruit(void) { std::cout << "香蕉》》》" << std::endl; return this; };
private:
protected:
};
class Apple :public Fruit
{
public:
Fruit * getFruit(void) { std::cout << "苹果》》》" << std::endl; return this; };
private:
protected:
};
class AbstractFactory
{
public:
AbstractFactory() {};
~AbstractFactory() {};
virtual AbstractFactory* cleatProductFactory() = 0; //创建工厂的接口
};
// 创建抽象的水果族工厂,该工厂能够生产一系列产品
class FruitsFamilyFactory :public AbstractFactory
{
public:
FruitsFamilyFactory() {};
~FruitsFamilyFactory() {};
virtual AbstractFactory* cleatProductFactory() { return this; } // 重写
Fruit* getBanana() { std::cout << "香蕉》》》" << std::endl; return new Banana; };
Fruit* getApple() { std::cout << "苹果》》》" << std::endl; return new Apple; };
};
AbstractFactory.cpp
#include "AbstractFactory.h"
mainTest.cpp
#include<iostream>
#include"AbstractFactory.h"
int main(void)
{
FruitsFamilyFactory* fruitsFamilyFactory =dynamic_cast<FruitsFamilyFactory*>((new FruitsFamilyFactory)->cleatProductFactory());
Banana* banana = dynamic_cast<Banana* >(fruitsFamilyFactory->getBanana());
Apple* apple = dynamic_cast<Apple* >(fruitsFamilyFactory->getApple());
delete banana;
delete apple;
delete fruitsFamilyFactory;
system("pause");
return 0;
}