将Factory Method模式用于不同的参数

时间:2017-02-02 06:08:45

标签: c++ design-patterns solid-principles

您好我的问题是关于它是否可以在构造函数中使用具有相同数量参数但具有不同类型的类的工厂模式。例如,我有一个名为 IVerify 的界面。我有两个实现它们的类, NameVerifier ,它在构造函数中包含 String name IntegerVerifier ,它接收 int num 在其构造函数中。在这种情况下是否可以进行工厂模式?

我们可以使用 IVerify Factory.CreateNameVerifier(string) IVerify Factory.createIntegerVerifier(int)它是否仍被视为工厂模式?

附加说明:我正在使用c ++

1 个答案:

答案 0 :(得分:1)

如果有NameVerifierIntegerVerifier的许多版本,那么您的解决方案仍然是工厂模式,因为您将抽象在CreateNameVerifierCreateIntegerVerifier内实例化哪个类。

但如果Verifiers对于他们所采用的参数类型是唯一的,即,只有一个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
}

注意: 严格类型在创建_Parameter之前,不会检查参数Verifiers。您可以使用Variadic Template/Parameter pack扩展对象创建的参数数量。