对不同的参数使用工厂方法模式
Using Factory Method pattern for different arguments
你好,我的问题是关于是否可以在 类 的构造函数中使用具有相同数量参数但类型不同的工厂模式。例如,我有一个名为 IVerify 的接口。我有 2 个 类 来实现它们,NameVerifier,它在其构造函数中接受一个 String name,并且 IntegerVerifier,它在其构造函数中接受一个 int num。这种情况下可以做工厂模式吗?
我们可以使用 IVerify Factory.CreateNameVerifier(string) 和 IVerify Factory.createIntegerVerifier(int) 还是被认为是工厂模式?
附加说明:我使用的是 c++
如果 NameVerifier
和 IntegerVerifier
有很多版本,那么您的解决方案仍然是工厂模式,因为您将抽象出 class 以在 CreateNameVerifier
和内部实例化CreateIntegerVerifier
.
但是如果 Verifiers
对于他们采用的论证类型是唯一的 w.r.t 即,只有一个 NameVerifier
和一个 IntergerVerifier
并且它们不同是因为他们的类型那么你现有的解决方案只是创建一种包装器来创建对象/Verifiers
。在这种情况下,它应该是这样的:
class IVerify
{
};
class CNameVerifier : public IVerify
{
};
class CIntegerVerifier : public IVerify
{
};
class CVerifierFactory
{
enum TYPE
{
STRING,
INTEGER
};
template<typename T>
IVerify* CreateVerifier(const CVerifierFactory::TYPE &_enumType, T _Parameter)
{
IVerify *pVerifier = NULL;
switch(_enumType)
{
case (CVerifierFactory::STRING)
pVerifier = new CNameVerifier(_Parameter);
break;
case (CVerifierFactory::INTEGER)
pVerifier = new CIntegerVerifier(_Parameter);
break;
}
return pVerifier;
}
};
CVerifierFactory g_oFactory;
IVerify *pVerifier = g_oFactory.CreateVerifier(CVerifierFactory::STRING, "Alex");
if(pVerifier != NULL)
{
//use pVerifier
}
注意: 在创建 Verifiers
之前不会对参数 _Parameter
进行严格类型检查。您可以使用 Variadic Template/Parameter pack.
扩展对象创建的参数数量
你好,我的问题是关于是否可以在 类 的构造函数中使用具有相同数量参数但类型不同的工厂模式。例如,我有一个名为 IVerify 的接口。我有 2 个 类 来实现它们,NameVerifier,它在其构造函数中接受一个 String name,并且 IntegerVerifier,它在其构造函数中接受一个 int num。这种情况下可以做工厂模式吗?
我们可以使用 IVerify Factory.CreateNameVerifier(string) 和 IVerify Factory.createIntegerVerifier(int) 还是被认为是工厂模式?
附加说明:我使用的是 c++
如果 NameVerifier
和 IntegerVerifier
有很多版本,那么您的解决方案仍然是工厂模式,因为您将抽象出 class 以在 CreateNameVerifier
和内部实例化CreateIntegerVerifier
.
但是如果 Verifiers
对于他们采用的论证类型是唯一的 w.r.t 即,只有一个 NameVerifier
和一个 IntergerVerifier
并且它们不同是因为他们的类型那么你现有的解决方案只是创建一种包装器来创建对象/Verifiers
。在这种情况下,它应该是这样的:
class IVerify
{
};
class CNameVerifier : public IVerify
{
};
class CIntegerVerifier : public IVerify
{
};
class CVerifierFactory
{
enum TYPE
{
STRING,
INTEGER
};
template<typename T>
IVerify* CreateVerifier(const CVerifierFactory::TYPE &_enumType, T _Parameter)
{
IVerify *pVerifier = NULL;
switch(_enumType)
{
case (CVerifierFactory::STRING)
pVerifier = new CNameVerifier(_Parameter);
break;
case (CVerifierFactory::INTEGER)
pVerifier = new CIntegerVerifier(_Parameter);
break;
}
return pVerifier;
}
};
CVerifierFactory g_oFactory;
IVerify *pVerifier = g_oFactory.CreateVerifier(CVerifierFactory::STRING, "Alex");
if(pVerifier != NULL)
{
//use pVerifier
}
注意: 在创建 Verifiers
之前不会对参数 _Parameter
进行严格类型检查。您可以使用 Variadic Template/Parameter pack.