SOLID - 接口隔离原则
接口隔离原则 – interface segregation principle
客户端不应该强迫依赖它不需要的接口。
1. 将接口视为一组API接口的集合
public interface UserService {
boolean register(String cellphone, String password);
boolean login(String cellphone, String password);
UserInfo getUserInfoById(long id);
UserInfo getUserInfoByCellphone(String cellphone);
}
public class UserServiceImpl implements UserService {
//...
}
当我们要实现删除操作的时候,最好不要直接在UserService里面加上这个方法,因为用户服务实质上不应该被默认直接具有删除的权限,相对应的,我们应该去创建一个新的接口,里面实现有删除相关的方法,实现接口的隔离。
public interface UserService {
boolean register(String cellphone, String password);
boolean login(String cellphone, String password);
UserInfo getUserInfoById(long id);
UserInfo getUserInfoByCellphone(String cellphone);
}
public interface RestrictedUserService {
boolean deleteUserByCellphone(String cellphone);
boolean deleteUserById(long id);
}
public class UserServiceImpl implements UserService, RestrictedUserService {
// ...省略实现代码...
}
2. 将接口理解为单个API接口或者函数
函数的设计需要功能单一,不要将多个不同的功能逻辑放在一个函数当中实现。
public class Statistics {
private Long max;
private Long min;
private Long average;
private Long sum;
private Long percentile99;
private Long percentile999;
//...省略constructor/getter/setter等方法...
}
public Statistics count(Collection<Long> dataSet) {
Statistics statistics = new Statistics();
//...省略计算逻辑...
return statistics;
}
count方法算了太多不同的指标,应该将其分割开的。
public Long max(Collection<Long> dataSet) { //... }
public Long min(Collection<Long> dataSet) { //... }
public Long average(Colletion<Long> dataSet) { //... }
// ...省略其他统计函数...
3. 将接口理解为OOP中的接口的概念
即在设计接口的时候尽量减少大而全的接口的设计,每个接口都只做一件事情,这样子类在implement interface的时候,我们通过接口名也可以很清晰的知道在做什么,会有什么功能,也很大程度上提升了代码的复用性。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com
文章标题:SOLID - 接口隔离原则
文章字数:451
本文作者:Leilei Chen
发布时间:2020-03-17, 09:26:08
最后更新:2020-03-17, 09:26:41
原始链接:https://www.llchen60.com/SOLID-%E6%8E%A5%E5%8F%A3%E9%9A%94%E7%A6%BB%E5%8E%9F%E5%88%99/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。