上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.7.4 接口隔离原则
接口隔离原则(ISP)就是像它的名字所暗示的那样。其表述如下:
不应该强迫客户端依赖它不使用的方法。
听起来它的意思很明显,但它有一些并不明显的含义。首先,应该倾向于选择更多更小的接口,而不是一个大的接口。其次,当添加派生类或扩展现有类的功能时,应该在扩展接口之前思考一下。
我们来展示一个违反此原则的示例,从以下接口开始:
我们用一个简单的类来实现它:
到目前为止没有什么问题。现在,假设我们想建模另一个更先进的食品加工器(Anoth-erFoodProcessor类),在接口中添加更多的方法:
现在,搅拌机类Blender就有问题了,因为它不支持这个新的接口——没有适当的方式来实现它。我们可以尝试绕过这个问题或抛出std::logic_error,但更好的解决方案是将接口分成两个,每个接口都有单独的职责:
现在,我们的AnotherFoodProcessor类可以同时实现这两个接口,而且我们不需要改变现有的食品加工器(Blender类)的实现。
SOLID还剩最后一个原则,现在我们来介绍它。