给定: - 需要在同一界面下收集的不同实现
Unluck:这些实现有一个方法'create',但输入参数的数量和类型不同
解决方案....? 除了对象的varargs之外还有什么其他选择?
答案 0 :(得分:1)
假设您希望在您想要的界面下只有一个创建方法
创建一个实现您想要的接口的包装类。现在根据某些条件从包装类调用各种实现。
维护性视角
如果可能的话,避免条件并从调用代码发送实现类名。只需调用从调用代码传递的类的create方法。(为此你还需要创建一个虚拟的create方法,其中一些对象类作为参数,包含每个实现类下的所有参数,它只是将调用委托给具有所需数量的参数的预期方法
答案 1 :(得分:0)
如果方法非常灵活,那么尝试通过接口强制执行它似乎没什么意义。但是,你可以做的是实现一个接口,描述你想要传递的不同类型的参数。
e.g。
public abstract create(CreateParamsInterface cpi) {};
然后在您的类中实现该抽象方法,使用暴露的va CreateParamsInterface
成员作为相关的。
答案 2 :(得分:0)
在界面中提供一个方法,该方法将条件作为参数,您可以根据该方法决定要调用的创建版本。根据条件,您可以调用相应的create()函数。逻辑与Factory design pattern的逻辑相同。
答案 3 :(得分:0)
我看到三个选项:
create()
的对象时传递参数。因此,您只需将参数添加到实现包含create()
的接口的对象的构造函数。create()
的对象作为参数。这样你应该有接口create(ObjectWhichWantsCreation x)
,这个方法将从给定的对象中获取所有必要的数据。create(Properties p)
设置为属性:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html这是非常通用的,但您必须确保它们包含所需的数据。当然你可以修改2和3,这样他们就可以使用方法create()
,只需添加另一个需要首先调用的方法setParams(SomeParams...)
。