声明:本博文篇幅短,适合快速回顾、朝花夕拾,不适合入门详解。
一、概念
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么。
二、模式结构图
三、例子
class ClothesFactory
{
public:
virtual Ups makeUps() = 0;
virtual Downs makeDowns() = 0;
};
class SpringClothesFactory : public ClothesFactory
{
public:
Ups makeUps()
{
return new SpringUps();
}
Downs makeDowns()
{
return new SpringDowns();
}
};
class AutumnClothesFactory : public ClothesFactory
{
public:
Ups makeUps()
{
return new AutumnUps();
}
Downs makeDowns()
{
return new AutumnDowns();
}
};
四、优缺点
1、优点
a、增加新的具体工厂和产品族很方便,已写好的代码无需修改,满足开闭原则。
b、分离了具体的类。
c、产品族具有约束性,有利于产品的一致性。
2、缺点
a、增加新的产品修改比较麻烦,需要修改抽象工厂和所有的具体工厂类。