一、UML图
二、包含的角色
IProduct类,定义工厂方法创建对象的接口
ConreteProduct类,具体产品类,实现IProduct接口
ICreator类,工厂方法类基类,声明了工厂方法,该方法返回一个IProduct类。
ConcreteCreator类,重写工厂方法,返回ConcreteProduct实例。
三、特点
定义:工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
1.与简单工厂相比,制造产品的工厂类不只有一个,而是每种具体产品都对应一个生产它的具体工厂类,这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体铲平类都继承自这个抽象产品类。
2.当需要增加一种产品的时候,需要做的是:增加一种继承自抽象产品的具体产品类,增加一个集成自抽象工厂的具体工厂类,改客户端,而不需要像简单工厂模式中那样更改工厂内的switch。
四、代码实现
ICreator类
#include "Product.h"
class ICreator {
public:
virtual Product* FactoryMethod() =0;
};
IProduct类
class IProduct
{
public:
virtual void Operation1() = 0;
};
ConcreteProduct类
class ConcreteProduct : public IProduct
{
public:
void Operation1() override;
};
void ConcreteProduct::Operation1() {
std::cout<<"ConcreteProduct Operation1!"<<std::endl;
}
ConcreteCreator类
class ConcreteCreator : public ICreator
{
public:
IProduct *FactoryMethod() override;
};
IProduct* ConcreteCreator::FactoryMethod() {
return new ConcreteProduct();
}
调用方式
ICreator *creator = new ConcreteCreator();
IProduct* product = creator->FactoryMethod();
product->Operation1();
delete product ;
delete creater ;