修正了简单工厂模式中不遵守开放-封闭原则。工厂方法模式把选择判断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端就好。
//工厂方法模式
class Product
{
public:
Product() {}
virtual ~Product() {}
public:
virtual void operation() = 0;
};
//产品A
class ProductA :public Product
{
public:
ProductA() {}
virtual ~ProductA() {}
public:
void operation() { cout << "ProductA" << endl; }
};
//产品B
class ProductB :public Product
{
public:
ProductB() {}
virtual ~ProductB() {}
public:
void operation() { cout << "ProductB" << endl; }
};
//工厂
class Factory
{
public:
virtual Product *CreatProduct() = 0;
};
//工厂A
class FactoryA :public Factory
{
public:
Product * CreatProduct() { return new ProductA(); }
};
// 工厂B
class FactoryB : public Factory
{
public:
Product * CreatProduct() { return new ProductB(); }
};
int main()
{
Factory * pfa = new FactoryA();
Product *ppa = pfa->CreatProduct();
ppa->operation();
Factory * pfb = new FactoryB();
Product *ppb = pfb->CreatProduct();
ppb->operation();
return 0;
}
工厂方法设计模式图: