请教一个Factory模式的问题
下面是我修改的一个关于Factory模式的代码,在里面添加了一个派生类ConcreteProduct1
/****************Factory.h************************/
class Product
{
public:
virtual ~Product() = 0;
protected:
Product();
private:
};
class ConcreteProduct:public Product
{
public:
~ConcreteProduct();
ConcreteProduct();
protected:
private:
};
class ConcreteProduct1:public Product
{
public:
~ConcreteProduct1();
ConcreteProduct1();
protected:
private:
};
class Factory
{
public:
virtual ~Factory() = 0;
virtual Product* CreateProduct() = 0;
protected:
Factory();
private:
};
class ConcreteFactory:public Factory
{
public:
~ConcreteFactory();
ConcreteFactory();
Product* CreateProduct();
protected:
private:
};
class ConcreteFactory1:public Factory
{
public:
~ConcreteFactory1();
ConcreteFactory1();
Product* CreateProduct();
protected:
private:
};
/****************Factory.cpp************************/
#include "Factory.h"
#include <iostream>
using namespace std;
Product::Product()
{
}
Product::~Product()
{
}
ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct...."<<endl;
}
ConcreteProduct::~ConcreteProduct()
{
}
ConcreteProduct1::ConcreteProduct1()
{
cout<<"ConcreteProduce1...."<<endl;
}
ConcreteProduct1::~ConcreteProduct1()
{
}
Factory::Factory()
{
}
Factory::~Factory()
{
}
ConcreteFactory::ConcreteFactory()
{
cout<<"ConcreteFactory....."<<endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
}
ConcreteFactory1::ConcreteFactory1()
{
cout<<"ConcreteFactory1....."<<endl;
}
ConcreteFactory1::~ConcreteFactory1()
{
}
Product* ConcreteFactory1::CreateProduct()
{
return new ConcreteProduct1();
}
/*****************test.cpp************************/
#include "Factory.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
Factory* fac = new ConcreteFactory();
Product* p = fac->CreateProduct();
Factory* fac1 = new ConcreteFactory1();
Product* p1 = fac1->CreateProduct();
return 0;
}
程序输入为:
ConcreteFactory.....
ConcreteProduct....
ConcreteFactory1.....
ConcreteProduce1....
Press any key to continue
我的问题是:
Factory模型的提出就是为了解决下面的情况:
n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码。这里带来两个问题1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了。),2)程序的扩展性和维护变得越来越困难。
但是现在通过上面的代码可以看出,虽然不用对派生类执行new操作了,但是必须对工厂的派生类分别进行new操作,也即上述测试程序中的:Factory* fac = new ConcreteFactory(); Factory* fac1 = new ConcreteFactory1();语句。这不是将问题转移了么?而没有从根本上解决问题?烦请大家给予指导,谢谢!!