我有一大段代码(遗留代码)知道连接到外部服务让我们说连接到Skype并带来它的可用性,它这样做的方式(这就是它的工作方式,为了示例)。是
SkypeAvailabilityManager.java
.init
.start
.stop
.connect
.disconnect
.keepAlive
.updateStatus
(让我们假设所有方法都需要公开并且有人调用它们)。现在有一大段代码(调用上述所有方法的大量遗留代码)。
现在我需要与Skype同步或与其他一些服务同步让我们说它MessengerB
但是对于 messengerB,我不需要初始化、启动、连接等,我只需要 updateStatus 方法。
所以我想到了这个重构(这对我来说听起来不太好,我会解释为什么
Interface: ExternalStatusFetcher
它的方法:
.updateStatus
现在遗留代码在许多地方调用上述.init .start .stop .connect 方法,但是我需要添加的新MessengerStatusUpdaterImpl 只需要.updateStatus 并且我想重用Skype 实现的.updateStatus 因为我想重用代码。
所以我的局限性:
- 重用 SkypeAvailabilityManager.java
- 遗留代码调用 .start .stop ... 从代码中的许多地方我没有什么要改变的,这是一个巨大的遗产。
- 我希望在我的代码中有一个共同的接口含义我想以相同的方式对待这两个 impl 但因此客户端要么调用所有方法,要么只调用其中的一部分我不知道,直到实现实际初始化为真正的实现。
什么是好的重构它?如果我的容器类拥有一个包含所有方法的接口,这应该很好,但是我的第二个实现不需要所有方法,所以我有点搞不清楚该怎么做。