我有一个接口 AService,它有 2 个方法,并且该接口由两个不同的类实现。其中一个方法是通过调用 AService 实例直接从另一个服务调用的(实际实现由工厂方法给出)。
interface AService {
method1
method2
}
class Impl1 extends AService {
//both methods implemented
}
class Impl2 extends AService {
//both methods implemented
}
class AnotherService {
void process() {
AService service = factory.getService(...);
if (some logical condition) {
service.method1();
}
}
}
随着时间的推移,情况发生了变化,现在其中一个类不再需要 method1,而另一个类仍然需要它。目前,我将实现主体保留为空,并且在类中声明的 method1 不再需要它,因为它仍然根据工厂方法的结果从服务中调用。 处理这个问题最干净的方法是什么?在服务中引入一个instanceof检查来检查实例是否属于该特定类型,然后转换它并调用该方法,并从公共接口中删除method1会更好吗?
如果您的
process
只会调用 method1
,那么您应该有一个仅指定这一点的接口。
有时您无法更改界面,因此您必须决定如果
method2
被意外调用会发生什么。要么“什么都不做”,这仍然意味着您可能必须构建适当的返回值,要么抛出不支持该操作的异常。如果其中一种情况很常见,您可以将它们作为接口中的默认值,但存在缺少实现的风险,因此他们应该决定是否要充分实现该方法。