3

给定: - 需要在同一接口下收集的不同实现

倒霉:这些实现有一个方法“create”,但输入参数的数量和类型不同

解决方案……?除了 Object 的 varargs 之外,还有什么其他选择?

4

4 回答 4

1

假设您只希望在您想要的接口下创建一个方法

创建一个实现您想要的接口的包装类。现在根据某些条件从包装类调用各种实现。

从可维护性的角度来看

如果可能的话,避免条件并从调用代码中发送实现类名。只需在调用代码中作为参数传递的类上调用 create 方法。(为此,您还需要创建一个虚拟的 create 方法,其中包含所有的对象类作为参数每个实现类下的参数,它只是将调用委托给具有所需参数数量的预期方法)

于 2013-07-25T08:56:53.307 回答
0

我看到三个选项:

  1. 您可以在构造具有方法的对象时传递参数create()。因此,您只需将参数添加到实现包含create().
  2. 修改 create 以便它将调用方法的对象作为参数create()。这样你应该有接口create(ObjectWhichWantsCreation x),这个方法将从给定对象中获取所有必要的数据。
  3. Make create(Properties p)where Properties: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html这很通用,但您必须确保它们包含所需的数据。

当然,您可以修改 2 和 3 以便它们具有方法create(),然后添加另一个setParams(SomeParams...)需要首先调用的方法。

于 2013-07-25T21:41:07.503 回答
0

如果该方法如此灵活,那么尝试通过接口强制执行它似乎没有什么意义。但是,您可以做的是实现一个接口,该接口描述您要传递的不同类型的参数。

例如

public abstract create(CreateParamsInterface cpi) {};

然后在您的类中实现该抽象方法,使用CreateParamsInterface相关的暴露 va 成员。

于 2013-07-25T09:02:37.390 回答
0

在接口中提供一个将条件作为参数的方法,您可以在此基础上决定要调用哪个版本的 create。根据条件可以调用相应的create()函数。逻辑与工厂设计模式相同。

于 2013-07-25T09:06:12.390 回答