我正在尝试使用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) 但是它不是工厂方法模式,因为调用者必须知道必须执行哪种方法。
你知道解决这个问题的任何解决办法吗?
提前致谢。
答案 0 :(得分:0)
您确定工厂实际上使设计更简单吗?您的用例示例非常抽象,因此很难说,但如果客户端必须已经明确地知道各种依赖关系,那么您是否应该让它选择实现?
如果您发现自己将客户想要的对象类型(作为枚举或字符串)传递给工厂,那么您可能根本不应该使用工厂,除非每种类型有多个实现。有例外,但这可以作为指导。
但是,也可能是客户端知道配置,但不知道并且不应该知道如何转换为实现。在这种情况下,如果您有许多配置选项排列,使用Builder Pattern可以简化您的API。