抽象工厂模式:
提供创建一系列相关或相互依赖对象的借口,而无需指定它们具体的类。适用于产品种类结构多的场合,主要用于创建一组(有多个种类)相关的产品,为它们提供创建的接口;就是当具有多个抽象角色时,抽象工厂便可以派上用场。
类图:
关键代码:
// AbstractFactory.h
#include "AbstractProductA.h"
#include "AbstractProductB.h"
class AbstractFactory
{
public:
AbstractFactory();
virtual ~AbstractFactory();
virtual AbstractProductA * createProductA() = 0;
virtual AbstractProductB * createProductB() = 0;
};
// ConcreteFactory1.h
#include "AbstractFactory.h"
#include "AbstractProductA.h"
#include "AbstractProductB.h"
class ConcreteFactory1 : public AbstractFactory
{
public:
ConcreteFactory1();
virtual ~ConcreteFactory1();
virtual AbstractProductA * createProductA();
virtual AbstractProductB * createProductB();
};
// ConcreteFactory1.cpp
#include "ConcreteFactory1.h"
#include "ProductA1.h"
#include "ProductB1.h"
ConcreteFactory1::ConcreteFactory1(){
}
ConcreteFactory1::~ConcreteFactory1(){
}
AbstractProductA * ConcreteFactory1::createProductA(){
return new ProductA1();
}
AbstractProductB * ConcreteFactory1::createProductB(){
return new ProductB1();
}
抽象工厂模式优缺点:
- 易于交换产品系列,在一个应用中只需要初始化时候出现一次。针对不同的产品配置,创建具体的工厂即可实现。
- 具体的创建实例与客户端分离。
- 若添加新的产品类,相应至少需要添加三个类,相应工厂需要添加生产产品方法,违背了开放-封闭原则。