工厂方法:
优点:
基本与简单工厂一致,但是遵循封闭-开放原则,灵活性更强
缺点:
与简单工厂差不多
代码实现:
FactoryMethod.h
#ifndef FACTORYMETHOD_H
#define FACTORYMETHOD_H
namespace FactoryMethod {
/*Product*/
class AbstrcutBase
{
public:
AbstrcutBase(){}
~AbstrcutBase(){}
virtual void show();
};
class ProductA : public AbstrcutBase
{
public:
ProductA(){}
~ProductA(){}
void show();
};
class ProductB : public AbstrcutBase
{
public:
ProductB(){}
~ProductB(){}
void show();
};
/*Factory*/
class FactoryBase
{
public:
FactoryBase(){}
~FactoryBase(){}
virtual AbstrcutBase *createFactory();
};
class FactoryA : public FactoryBase
{
public:
FactoryA(){}
~FactoryA(){}
AbstrcutBase *createFactory();
};
class FactoryB : public FactoryBase
{
public:
FactoryB(){}
~FactoryB(){}
AbstrcutBase *createFactory();
};
}
#endif // FACTORYMETHOD_H
#include "factorymethod.h"
#include <iostream>
void FactoryMethod::AbstrcutBase::show()
{
std::cout << "this is AbstructBase" <<std::endl;
}
void FactoryMethod::ProductA::show()
{
std::cout << "this is ProductA" <<std::endl;
}
void FactoryMethod::ProductB::show()
{
std::cout << "this is ProductB" <<std::endl;
}
FactoryMethod::AbstrcutBase *FactoryMethod::FactoryBase::createFactory()
{
std::cout << "this is AbstructFactoryBase" <<std::endl;
return new AbstrcutBase;
}
FactoryMethod::AbstrcutBase *FactoryMethod::FactoryA::createFactory()
{
std::cout << "this is FactoryA" <<std::endl;
return new ProductA;
}
FactoryMethod::AbstrcutBase *FactoryMethod::FactoryB::createFactory()
{
std::cout << "this is FactoryB" <<std::endl;
return new ProductB;
}
main.cpp
#include <iostream>
#include "factorymethod.h"
int main()
{
FactoryMethod::FactoryBase *factory = new FactoryMethod::FactoryBase;
factory->createFactory()->show();
factory = new FactoryMethod::FactoryA;
factory->createFactory()->show();
factory = new FactoryMethod::FactoryB;
factory->createFactory()->show();
return 0;
}<strong>
</strong>