对不同的参数使用工厂方法模式

Using Factory Method pattern for different arguments

你好,我的问题是关于是否可以在 类 的构造函数中使用具有相同数量参数但类型不同的工厂模式。例如,我有一个名为 IVerify 的接口。我有 2 个 类 来实现它们,NameVerifier,它在其构造函数中接受一个 String name,并且 IntegerVerifier,它在其构造函数中接受一个 int num。这种情况下可以做工厂模式吗?

我们可以使用 IVerify Factory.CreateNameVerifier(string)IVerify Factory.createIntegerVerifier(int) 还是被认为是工厂模式?

附加说明:我使用的是 c++

如果 NameVerifierIntegerVerifier 有很多版本,那么您的解决方案仍然是工厂模式,因为您将抽象出 class 以在 CreateNameVerifier 和内部实例化CreateIntegerVerifier.

但是如果 Verifiers 对于他们采用的论证类型是唯一的 w.r.t 即,只有一个 NameVerifier 和一个 IntergerVerifier 并且它们不同是因为他们的类型那么你现有的解决方案只是创建一种包装器来创建对象/Verifiers。在这种情况下,它应该是这样的:

参考:Factory Pattern

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.

扩展对象创建的参数数量