二、工厂方法模式
类图
动机
个人理解:基于简单工厂方法模式之上,减轻工厂类负担,将具体某个产品创建交给某个某个具体的工厂。定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类
角色
(1)抽象工厂
所有具体工厂的基类,提供了生产抽象产品的方法。
(2)具体工厂
具体某个生产某个具体产品的工厂。
(3)抽象产品
所有具体产品的基类。
(4)具体产品
优缺点
优点:
减轻简单工厂方法工厂类的职责,增加某个具体产品时不需要修改工厂类的方法,只需要添加对应的工厂类就行。
缺点:
每次添加一个具体产品就得对应添加一个具体工厂,当添加较多类时,会造成系统庞杂,不易管理。
代码:
抽象产品
class AbstractProduct
{
…
};
具体产品A
class ConcreteProductA: public AbstractProduct
{
…
};
抽象工厂
class Factory
{
public:
virtual AbstractProduct GetProduct();
…
};
工厂A
class FactoryA:public Factory
{
public :
…
Abstract AbstractProduct * GetProduct();
};
AbstractProduct* Factory::GetProduct(std::string productID)
{
AbstractProduct* pAbstractProductA= new ConcreteProductA();
return pAbstractProductA;
}