工厂方法模式中的多个参数

时间:2016-11-03 00:10:51

标签: java parameters factory-method

我正在尝试使用Factory Method Pattern来创建不同的对象,但我有几个疑问。让我告诉你这个场景:

public class ObjectFactory{

    public static IObject createObject(Param1 p1, Param2 p2, Param3 p3){
        if (p1.getName('name1')){
            return new Object1(p1,p2,p3);
        }else{
            return new Object2(p1, p2);
        }
    }
}

public interface IObject{   
    void doSomething();
}

public class Object1 implements IObject {
    public Object1(Param1 p1, Param2 p2, Param3 p3){}
}

public class Object2 implements IObject {
    public Object1(Param1 p1, Param2 p2){}
}

我对ObjectFactory的createObject方法中的Param3有点困惑。我总是有这个参数,但有时它没有任何意义。 我不喜欢这个,因为如果有一天我添加更多具有不同参数的对象,我将需要在方法签名中添加太多参数。

我在考虑定义: public static IObject createObject(Param1 p1,Param2 p2,Param3 p3) public static IObject createObject(Param1 p1,Param2 p2) 但是它不是工厂方法模式,因为调用者必须知道必须执行哪种方法。

你知道解决这个问题的任何解决办法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您确定工厂实际上使设计更简单吗?您的用例示例非常抽象,因此很难说,但如果客户端必须已经明确地知道各种依赖关系,那么您是否应该让它选择实现?

如果您发现自己将客户想要的对象类型(作为枚举或字符串)传递给工厂,那么您可能根本不应该使用工厂,除非每种类型有多个实现。有例外,但这可以作为指导。

但是,也可能是客户端知道配置,但不知道并且不应该知道如何转换为实现。在这种情况下,如果您有许多配置选项排列,使用Builder Pattern可以简化您的API。