二、工厂方法模式
类图
动机
个人理解:基于简单工厂方法模式之上,减轻工厂类负担,将具体某个产品创建交给某个某个具体的工厂。定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类
角色
(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; }