【问题标题】:Multiple parameters in Factory Method Pattern工厂方法模式中的多个参数
【发布时间】:2016-11-03 00:10:50
【问题描述】:

我正在尝试使用工厂方法模式来创建不同的对象,但我有几个疑问。让我给你看一下场景:

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 有点困惑。我总是有这个参数,但有时它没有意义。 我不喜欢这样,因为如果有一天我添加更多具有不同参数的对象,我将需要在方法签名中添加太多参数。

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

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

提前致谢。

【问题讨论】:

标签: java parameters factory-method


【解决方案1】:

您确定工厂实际上是在简化设计吗?您的用例示例非常抽象,因此很难说,但如果客户端必须已经明确知道各种依赖项,也许您也应该让它选择实现?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2022-11-12
    相关资源
    最近更新 更多