具有实现类的接口设计模式不再需要所有方法

问题描述 投票:0回答:1

我有一个接口 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会更好吗?

java design-patterns legacy
1个回答
0
投票

如果您的

process
只会调用
method1
,那么您应该有一个仅指定这一点的接口。

有时您无法更改界面,因此您必须决定如果

method2
被意外调用会发生什么。要么“什么都不做”,这仍然意味着您可能必须构建适当的返回值,要么抛出不支持该操作的异常。如果其中一种情况很常见,您可以将它们作为接口中的默认值,但存在缺少实现的风险,因此他们应该决定是否要充分实现该方法。

© www.soinside.com 2019 - 2024. All rights reserved.