1、概念:抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
2、模式中包含的角色及其职责
抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
3、构造图
4、三种工厂模式的区别
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
5、抽象工厂的实现
#include <iostream>
#include <string>
using namespace std;
// 服装基类
class Clothes
{
public:
virtual void show() = 0;
};
// 阿迪系列
class ATshirt:public Clothes
{
public:
virtual void show()
{
cout <<"我是 阿迪T恤" << endl;
}
};
class AShoe:public Clothes
{
public:
virtual void show()
{
cout <<"我是 阿迪鞋子" << endl;
}
};
class AJeans:public Clothes
{
public:
virtual void show()
{
cout <<"我是 阿迪牛仔" << endl;
}
};
// 李宁系列
class LTshirt:public Clothes
{
public:
virtual void show()
{
cout <<"我是 李宁T恤" << endl;
}
};
class LShoe:public Clothes
{
public:
virtual void show()
{
cout <<"我是 李宁鞋子" << endl;
}
};
class LJeans:public Clothes
{
public:
virtual void show()
{
cout <<"我是 李宁牛仔" << endl;
}
};
// 抽象工厂:规定必须生产的产品类型
class AbsFactory
{
public:
virtual Clothes* CreateShoe() = 0;
virtual Clothes* CreateTshirt() = 0;
virtual Clothes* CreateJeans() = 0;
};
// 建阿迪的工厂
class AFactory : public AbsFactory
{
public:
virtual Clothes* CreateShoe()
{
return new AShoe;
}
virtual Clothes* CreateTshirt()
{
return new ATshirt;
}
virtual Clothes* CreateJeans()
{
return new AJeans;
}
};
// 建李宁的工厂
class LFactory : public AbsFactory
{
public:
virtual Clothes* CreateShoe()
{
return new LShoe;
}
virtual Clothes* CreateTshirt()
{
return new LTshirt;
}
virtual Clothes* CreateJeans()
{
return new LJeans;
}
};
int main()
{
AbsFactory *af = new AFactory;
AbsFactory *lf = new LFactory;
Clothes *c1 = af->CreateShoe();
Clothes *c2 = lf->CreateJeans();
Clothes *c3 = af->CreateTshirt();
c1->show();
c2->show();
c3->show();
return 0;
}