相同的接口,实现差异

时间:2013-07-25 08:51:49

标签: java design-patterns

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

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

解决方案....? 除了对象的varargs之外还有什么其他选择?

4 个答案:

答案 0 :(得分:1)

假设您希望在您想要的界面下只有一个创建方法

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

维护性视角

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

答案 1 :(得分:0)

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

e.g。

public abstract create(CreateParamsInterface cpi) {};

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

答案 2 :(得分:0)

在界面中提供一个方法,该方法将条件作为参数,您可以根据该方法决定要调用的创建版本。根据条件,您可以调用相应的create()函数。逻辑与Factory design pattern的逻辑相同。

答案 3 :(得分:0)

我看到三个选项:

  1. 您可以在构造具有方法create()的对象时传递参数。因此,您只需将参数添加到实现包含create()的接口的对象的构造函数。
  2. 修改create,以便将调用方法create()的对象作为参数。这样你应该有接口create(ObjectWhichWantsCreation x),这个方法将从给定的对象中获取所有必要的数据。
  3. create(Properties p)设置为属性:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html这是非常通用的,但您必须确保它们包含所需的数据。
  4. 当然你可以修改2和3,这样他们就可以使用方法create(),只需添加另一个需要首先调用的方法setParams(SomeParams...)