英文原文: Consider interface segregation
抽象很有用,而接口(interface )是实现依赖反转的途径之一。但是我们应该正确的使用接口。
在开发中,我们得到了一个去观察用户名文字变化的需求。每当用户输入东西时,我们需要得到这个数据,做验证一类的事情。
实现这个东西第一眼看上去非常简单。因为我们知道依赖反转而且我们也依赖于抽象,我们只需在LoginListener里添加一个新的方法。
我们添加了这个新方法并且在LoginActivity中实现了它。所有事情都很顺利,我们完全实现了我们想要的。
但不久之后,我们需要在别的地方使用LoginFragment 。因为我们可以重用它所有这并没什么。多亏了我们遵循的原则。
但是有一个问题,新的类并不需要新添加的最后一个方法。它完全是多余的。
你可能会说”把它留空就是了”。但是想象一下有许多方法并且都要留空。这完全是丑陋的还会误导开发者。你必须时时加上旁注说”嘿其实我们不用它"。
那么我们如何解决这个问题呢?
基本说来,我们就是再创建另外一个接口。不强制类去实现每个接口是一种好的实践方式。
不管谁需要这个数据,都可以实现这个接口与使用它。我们例子中的LoginActivity 两个接口都实现了。
我们不再需要在AccountActivity 中强制实现这个方法(onUsernameTextChanged())了。